1
    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() 中的列值?

谢谢,

4

1 回答 1

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;
于 2011-06-24T22:52:26.230 回答