Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查两个日期是否相等的优雅解决方案,Linq(第二个日期不是参数)_C#_Linq_Entity Framework_Linq To Sql_Datetime - Fatal编程技术网

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

C# 检查两个日期是否相等的优雅解决方案,Linq(第二个日期不是参数),c#,linq,entity-framework,linq-to-sql,datetime,C#,Linq,Entity Framework,Linq To Sql,Datetime,我需要检查Linq查询中的两个日期是否相等,以及这些日期是否来自两个不同的表(不是作为参数)。我已经研究了web上和SO中现有的解决方案。有些不适用于我的情况,有些不优雅。只是寻找更好的替代解决方案,如果有的话 示例查询(只需比较日期部分): 此操作失败,错误为“LINQ to Entities中不支持'Date'。只支持初始值设定项、实体成员和实体导航属性” post有一个分别比较日、月和年的解决方案。我试图将其包装成一个扩展方法,但Linq似乎也不喜欢扩展方法。因为第二个日期不是一个变量,所

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

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

此操作失败,错误为“LINQ to Entities中不支持'Date'。只支持初始值设定项、实体成员和实体导航属性”


post有一个分别比较日、月和年的解决方案。我试图将其包装成一个扩展方法,但Linq似乎也不喜欢扩展方法。因为第二个日期不是一个变量,所以我不能使用链接帖子中提到的其他解决方案(并且由于某种原因,我不能在Linq中的日期上调用“AddDays”方法)。看起来Linq中的Date API有很多限制。

据我所知,您可以使用
==运算符来比较日期。

尝试使用from 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

=
比较日期和时间部分;OP只希望比较日期。分别比较日、月和年是否如预期的那样有效?是的,如果我分别比较它们,则有效。非常感谢。这很有魅力。我查看了生成的SQL,并将日期比较转换为DATEDIFF(day,t1.Date1,t2.Date2)=0,这是正确的。我以前不知道这个“实体函数”。再次感谢。忘了提到我使用了您的代码稍微修改过的版本。我不能像我在文章中提到的那样使用“Datetime”的“Date”属性,所以我使用了“EntityFunctions.DiffDays(t1.Date1,t2.Date2)==0”,它工作了。
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