Получение значения столбца - PullRequest
1 голос
/ 25 июня 2011
    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 Ответ

1 голос
/ 25 июня 2011

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;
...