LINQ not checking for null

本文关键字:null for checking not LINQ | 更新日期: 2023-09-27 18:06:14

下面的代码应该取每行学费的简单平均值,但是需求规定了导入的数据集允许空值。

下面一行没有正确检查值,我得到错误:"ArgumentNullException未被用户代码处理,值不能为空。"

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

LINQ not checking for null

您应该比较DBNull.Value,而不是null:

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

一旦你过滤掉了空值,你就不需要DefaultIfEmpty()调用了

代替DataRow.Field方法,尝试使用DataRow.IsNull。此外,您不需要调用DefaultIfEmpty()

例如:

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