当前位置:  开发笔记 > 数据库 > 正文

LINQ to Entities用于减去2个日期

如何解决《LINQtoEntities用于减去2个日期》经验,为你挑选了4个好方法。

我正在尝试使用LINQ with Entity Framework确定两个日期之间的天数.它告诉我它不能识别System.TimeSpan类上的Subtract

这是我在LINQ查询中的哪个部分.

where ((DateTime.Now.Subtract(vid.CreatedDate).TotalDays < maxAgeInDays))

这是我在VS.NET调试器中收到的错误

{"LINQ to Entities无法识别方法'System.TimeSpan Subtract(System.DateTime)'方法,并且此方法无法转换为商店表达式."}

我是做错了还是有更好的方法来获得实体框架中2个DateTimes之间的天数?

谢谢迈克尔



1> Morten Chris..:

在这种情况下,接受的答案更好,但作为参考,您可以使用EntityFunctions该类来执行日期操作等.

where (vid.CreatedDate >= EntityFunctions.AddDays(DateTime.Now, -maxAgeInDay))


不推荐使用EntityFunctions.DbFunctions是新类.
请注意,这仅在Entity Framework v4中受支持.这不适用于Entity Framework v1.
有人用'DbFunctions`进行单元测试吗?我没有运气.

2> 小智..:

以下是我如何使用它

我定义了一个代表最早日期的日期时间变量

DateTime oldestDate = DateTime.Now.Subtract(new TimeSpan(maxAgeInDays, 0, 0, 0, 0));
...

然后我修改了LINQ查询的where部分

where (vid.CreatedDate >= oldestDate )

像魅力一样工作 - 感谢Micah让我思考表达树


您应该将@Micah标记为答案,并在其回复中添加评论或使用最终答案更新您的问题.

3> Ladislav Mrn..:

您还可以使用System.Data.Objects.EntityFucntions:

currentDate = DateTime.Now;

...
where  EntityFunctions.DiffDays(currentDate, vid.CreatedDate) < maxAgeIdDays 

所有函数EntityFunctions仅用于Linq到实体,并映射到SQL函数.


另外值得注意的是,一旦升级到EF 6+,System.Data.Objects.EntityFucntions就会过时,而是使用:System.Data.Entity.DbFunctions
这个函数是弃用的DbFunctions.DiffMilliseconds(o.DateReceived,o.DateOrder)istead

4> Micah..:

您遇到这类问题,因为谓词需要转换为表达式树.并且翻译过程无法识别DateTime.Now.Subtract方法.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有