首页 > 解决方案 > 实体框架 - Oracle - 使用 linq 比较可为空的 DateTime 不起作用

问题描述

我正在将实体框架与 Oracle 一起使用,并且我正在尝试使用 linq 比较可以为空的 DateTime 进行查询,但是当我进行此比较时,查询给出了错误的结果。

我在 PL/SQL Developer 中执行了等价的查询,得到了正确的结果。

这是我的代码

using (var context = new CorporativoContext())
        {
            context.Database.Log = Console.Write;

            var parametro = (from p in context.PARAMETRO
                    join pv in context.PARAMETRO_VALOR on p.Id equals pv.Id
                    where p.Descricao == descricaoParametro && pv.InicioVigencia <= DateTime.Now && pv.FimVigencia == null
                    select pv).FirstOrDefault();

            return parametro;
        }

属性“FimVigencia”是可为空的 DateTime(DateTime?FimVigencia),当我将其与 null 进行比较时,查询结果不返回任何内容,但如果我删除此比较,查询会为我提供属性“FimVigencia”的值为 null 的对象。

谁能帮我?

标签: c#entity-frameworkentity-framework-6

解决方案


找到了解决方案。我会在这里为任何有同样问题的人发帖

我需要使用 DbFunctions.TruncateTime 来比较 null

这是我的代码:

(from p in _context.PARAMETRO
                join pv in _context.PARAMETRO_VALOR on p.Id equals pv.Id
                where p.Descricao == descricaoParametro && pv.InicioVigencia <= DateTime.Now && 
                (DbFunctions.TruncateTime(pv.FimVigencia) == null || pv.FimVigencia >= DateTime.Now)
                select pv).FirstOrDefault();

推荐阅读