一尘不染

Linq到EntityFramework DateTime

c#

在我的应用程序中,我正在使用实体框架。

我的桌子

-Article
-period
-startDate

我需要符合条件的记录=> DateTime.Now > startDate and (startDate + period) > DateTime.Now

我尝试了这段代码,但现在可以正常工作了

Context.Article
    .Where(p => p.StartDate < DateTime.Now)
    .Where(p => p.StartDate.AddDays(p.Period) > DateTime.Now)

当我运行我的代码时,发生以下异常

LINQ to Entities无法识别方法’System.DateTime AddDays(Double)’,并且该方法无法转换为商店表达式。


阅读 213

收藏
2020-05-19

共1个答案

一尘不染

使用LINQ to Entity Framework时,Where子句中的谓词将转换为SQL。您会收到此错误,因为没有对SQL
DateTime.Add()有意义的转换。

一种快速的解决方法是将第一个Where语句的结果读入内存,然后使用LINQ to Objects完成过滤:

Context.Article.Where(p => p.StartDate < DateTime.Now)
               .ToList()
               .Where(p => p.StartDate.AddDays(p.Period) > DateTime.Now);

如果您使用的是.NET 4.0,也可以尝试EntityFunctions.AddDays方法:

Context.Article.Where(p => p.StartDate < DateTime.Now)
               .Where(p => EntityFunctions.AddDays(p.StartDate, p.Period)
                   > DateTime.Now);

注意:EF 6现在System.Data.Entity.DbFunctions.AddDays

2020-05-19