Получение значения столбца

    private string FindTaxItemLocation(string taxItemDescription)
    {
        if (!templateDS.Tables.Contains(cityStateTaxesTable.TableName))
            throw new Exception("The schema dos not include city state employee/employer taxes table");
        var cityStateTaxes =
            templateDS.Tables[cityStateTaxesTable.TableName].AsEnumerable().FirstOrDefault(
                x => x.Field<string>(Fields.Description.Name) == taxItemDescription);//[x.Field<string>(Fields.SteStateCodeKey.Name)]);

        if (cityStateTaxes != null)
            return cityStateTaxes[Fields.SteStateCodeKey.Name].ToString();

        return null;
    }

cityStateTaxes - это DataRow, почему / как я не могу получить значение столбца внутри FirstOrDefault()?

Спасибо,

1 ответ

FirstOrDefault() выбирает первый элемент в коллекции (необязательно, который удовлетворяет предикату) или возвращает null в случае там он пуст (или ничто не удовлетворяет предикату). Это не будет делать прогнозы для вас. Поэтому, если вы используете его, доступ к полю элемента может быть неудобным, поскольку вы должны включить проверку значений по умолчанию.

Я предлагаю всегда проецировать на желаемое поле (поля) перед использованием FirstOrDefault()Таким образом, вы получите свое поле прямо, без необходимости выполнять проверку.

var cityStateTaxes = templateDS.Tables[cityStateTaxesTable.TableName]
    .AsEnumerable()
    .Where(row => row.Field<string>(Fields.Description.Name) == taxItemDescription) // filter the rows
    .Select(row => row.Field<string>(Fields.SteStateCodeKey.Name)) // project to your field
    .FirstOrDefault(); // you now have your property (or the default value)

return cityStateTaxes;
Другие вопросы по тегам