在没有实体框架的情况下使用EntityFunction

时间:2017-02-06 14:17:00

标签: c# .net linq datetime

我有一个Linq查询:

people.Where(x => EntityFunctions.DiffHours(x.CreateDate, dtMatch) > 0)

仅在Linq 2 Entities内有效。

如何在没有实体的情况下运行此方法?

到目前为止我尝试过:

people.Where(x => (x.CreateDate - dtMatch).TotalHours  > 0) 

......似乎给出了不同的结果

2 个答案:

答案 0 :(得分:1)

简而言之:要使2个语句等效,请将TotalHours更改为Math.Floor((x.CreateDate - dtMatch).TotalHours)

people.Where(x => Math.Floor((x.CreateDate - dtMatch).TotalHours) > 0) 

TotalHours将返回小数。因此,如果两个日期之间有30分钟,那么将返回0.5。当.5大于0时,上述返回true。如果您想要整个小时,请将其更改为Math.Floor(TotalHours)而不是TotalHours。这会将其四舍五入到下一个最大整数。

EntityFunctions.DiffHours - 返回一个表示整个小时数的整数,如果是30分钟。差异然后是0就是结果。

答案 1 :(得分:1)

也许,如果dtMatch超过CreateDate,你应该考虑这种情况,如果它在以下情况下应该考虑:

people.Where(x => Math.Abs((x.CreateDate - dtMatch).TotalHours) > 0)