LINQ没有检查null

时间:2011-08-18 14:20:57

标签: c# linq

以下代码应该采用每行的学费率的简单平均值,但是要求规定导入的数据集允许空值。

下面的行没有正确检查值,我收到错误:“ArgumentNullException未被用户代码处理,Value不能为null。”

TUITIONCurr = g
    .Where(p => !object.Equals(p.Field<double>("TUITION"),null))
    .DefaultIfEmpty()
    .Average(p => p.Field<double>("TUITION")),

2 个答案:

答案 0 :(得分:2)

您应该与DBNull.Value进行比较,而不是null

TUITIONCurr = g
    .Where(p => !object.Equals(p.Field<double>("TUITION"), DBNull.Value))
    .Average(p => p.Field<double>("TUITION"));

过滤掉空值后,您不需要DefaultIfEmpty()来电。

答案 1 :(得分:1)

请尝试使用DataRow.IsNull,而不是DataRow.Field方法。此外,您无需拨打DefaultIfEmpty()

E.g:

TUITIONCurr = g
   .Where(p => !p.IsNull("TUITION"))
   .Average(p => p.Field<double>("TUITION")),