在Linq中检查两个日期是否相等的优雅解决方案(其中第二个日期不是参数)

RKP*_*RKP 9 c# linq datetime entity-framework linq-to-sql

我需要检查Linq查询中两个日期是否相等,日期来自两个不同的表(不作为参数).我已经在网上和SO中查看了现有的解决方案.有些不适用于我的情况,有些不优雅.如果有的话,只是寻找更好的替代解决方案.

示例查询(需要仅比较日期部分):

var query = from t1 in Table1
            join t2 in Table2 on t1.Id equals t2.ForeignKeyId
            where t1.Id = someId
               && t1.Date1.Date.Equals(t2.Date2.Date)
Run Code Online (Sandbox Code Playgroud)

这个失败并出现错误"LINQ to Entitiies不支持''Date'.仅支持初始值设定项,实体成员和实体导航属性"

LINQ to Entities不支持帖子'Date'.仅支持初始化程序,实体成员和实体导航属性,该解决方案分别比较日,月和年.我试图将它包装成扩展方法,但似乎Linq也不喜欢扩展方法.由于第二个日期不是变量,我不能使用链接帖子中提到的其他解决方案(由于某种原因,我不能在Linq内部的日期调用"AddDays"方法).Linq中的Date API看起来有很多限制.

Ren*_*iuz 16

尝试使用DiffDays从EntityFunctions类.个人从未使用过这个,但值得尝试这样:

var query = from t1 in Table1
        join t2 in Table2 on t1.Id equals t2.ForeignKeyId
        where t1.Id = someId
           && EntityFunctions.DiffDays(t1.Date1, t2.Date2) == 0
Run Code Online (Sandbox Code Playgroud)