在Oracle数据库中,EF架构如下LINQ查询不能正确映射到SQL查询(会报错 predicate不能为空)
DateTime dt2 = DateTime.Now.Date;
Expression<Func<DtoOPCUREORDERVIEW, bool>> filter2 =
a => (a.VALIDEXECDAYS == 0 && a.ADMITDATEON >= dt)
|| (a.VALIDEXECDAYS > 0
&& (a.VALIDEXECDATE != null || a.VALIDEXECDATE.HasValue)
&& a.VALIDEXECDATE.Value >= dt2)
;
以上语句应该直接写为(字段为空自然条件不成立,无需画蛇添足):
DateTime dt2 = DateTime.Now.Date;
Expression<Func<DtoOPCUREORDERVIEW, bool>> filter2 =
a => (a.VALIDEXECDAYS == 0 && a.ADMITDATEON >= dt)
|| (a.VALIDEXECDAYS > 0
&& a.VALIDEXECDATE >= dt2)
;
总结:
虽然Oracle SQL中没有直接使用lambda表达式的方式(如在某些其他编程语言中那样),但你可以通过CASE语句或者NVL和NVL2函数来实现类似的功能。在PL/SQL中,你可以使用匿名块和条件语句来达到类似的效果。
另外,其它在C#语法的 .AddDays函数均不能在上述 Lambda表达式。
浙公网安备 33010602011771号