Lambda Where子句筛选今明日期报CS0023错误问题排查
错误产生原因
- 语法错误:
&&是布尔逻辑运算符,只支持连接两个可计算为布尔值的表达式。你写的代码里&&放在了第一个Where()的括号外,左边是Where()返回的可查询集合对象,右边是单独书写的lambda表达式,两个操作数都不是布尔类型,完全不符合&&的语法要求。编译器解析这段错位代码时,会尝试对独立存在的lambda表达式做成员访问,直接触发CS0023报错,提示不能对lambda表达式类型应用.运算符。 - 逻辑错误:你要筛选的是日期为今日或明日的记录,单条记录的日期不可能同时等于两个不同日期,本来就该用
||(逻辑或)而不是&&(逻辑与)。另外就算你把第二个条件补成合法的链式Where调用,多个连续Where默认是AND逻辑——也就是要求记录同时满足所有Where条件,最终会去查“日期既是今天又是明天”的不存在的数据,返回空结果,完全不符合需求。
正确实现写法
把两个日期判断合并到同一个Where的lambda表达式里,用||连接判断条件即可:
Dances_Moderated = Dances_Moderated .Where(x => x.SingleDate == DateTime.Today || x.SingleDate == DateTime.Today.AddDays(1)) .ToList();
如果你需要保持灵活追加Where条件的特性,要记住:链式追加的独立Where默认是AND交集筛选,同组的OR并集判断必须写在同一个Where的lambda内部,不能拆成多个独立Where实现。
内容的提问来源于stack exchange,提问作者JustJohn
相关产品推荐
相关产品推荐

