Chr☆s Kwok 的技术笔记

.NET, C#, WPF, WCF, WF, .NetCore & LINQ ... I know how it works because I know why it works ...

博客园 首页 新随笔 订阅 管理

在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语句或者NVLNVL2函数来实现类似的功能。在PL/SQL中,你可以使用匿名块和条件语句来达到类似的效果。
另外,其它在C#语法的 .AddDays函数均不能在上述 Lambda表达式。

posted on 2026-07-23 09:53  Chr☆s  阅读(8)  评论(0)    收藏  举报