如何在LINQ的Where子句中处理字段Null值并替换为指定值?
处理LINQ查询中字段Null值的正确方式
首先修正你代码里的两个基础问题:
- C#中日期类型是大写开头的
DateTime,不是datetime - 字符串不能直接赋值给
DateTime变量,需要用解析方法转换,比如ParseExact指定格式
针对你要把bar字段的Null值替换为dob再比较的需求,有两种简洁的实现方式:
方式一:使用可空类型+空合并运算符
先以可空DateTime类型获取字段值,再用??运算符将Null替换为dob:
// 正确解析日期字符串(格式为MMddyyyy:月/日/年) DateTime dob = DateTime.ParseExact("05152024", "MMddyyyy", CultureInfo.InvariantCulture); var query = from row in maxLookupData.AsEnumerable() // 若bar字段为Null,直接用dob替代 let barValue = row.Field<DateTime?>("bar") ?? dob where barValue <= dob select row;
方式二:使用IsNull方法判断
通过row.IsNull("bar")直接判断字段是否为Null,再选择对应的值:
DateTime dob = DateTime.ParseExact("05152024", "MMddyyyy", CultureInfo.InvariantCulture); var query = from row in maxLookupData.AsEnumerable() where (row.IsNull("bar") ? dob : row.Field<DateTime>("bar")) <= dob select row;
你原有写法的问题
row.IsNull()的参数应该是字段名字符串(比如"bar"),不是表达式- 空合并运算符
??的使用位置错误,不能嵌套在IsNull的参数里 - 未处理字符串转DateTime的编译错误
内容的提问来源于stack exchange,提问作者FullStack-.NetMVC-BizMule-Dev
相关产品推荐
相关产品推荐

