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



我需要检查两个日期是否在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)

此操作失败,报错" LINQ to entities中不支持'Date' "。只支持初始化式、实体成员和实体导航属性"

the post '在LINQ到实体中不支持。只支持初始化器、实体成员和实体导航属性,有一个单独比较日、月和年的解决方案。我试着把它包装成一个扩展方法,但是Linq似乎也不喜欢扩展方法。由于第二个日期不是一个变量,我不能使用链接帖子中提到的其他解决方案(由于某种原因,我不能在Linq中调用"AddDays"方法)。看起来Linq中的Date API有很多限制。

尝试使用EntityFunctions类中的DiffDays。我个人从未使用过这个,但值得尝试一下:

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

据我所知,你可以使用== operator来比较日期。

相关内容

最新更新