Получение значения столбца
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;