LINQ to Entities减去2个date

我正在尝试使用entity framework来确定使用LINQ的两个date之间的天数。 它告诉我,它不能识别System.TimeSpan类中的减法

这是我的LINQ查询的哪一部分。

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

这里是我在VS.NETdebugging器中收到的错误

{“LINQ to Entities不能识别'System.TimeSpan Subtract(System.DateTime)'方法的方法,而且这个方法不能被转换成存储expression式。

我做错了什么或者是否有更好的方法来获得entity framework中的2个date时间之间的天数?

谢谢Michael

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

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

这是我如何工作

我定义了一个代表最早date的date时间variables

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

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

 where (vid.CreatedDate >= oldestDate ) 

像一个魅力工作 – 感谢弥迦让我考虑expression树

你也可以使用System.Data.Objects.EntityFucntions

 currentDate = DateTime.Now; ... where EntityFunctions.DiffDays(currentDate, vid.CreatedDate) < maxAgeIdDays 

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

由于谓词需要转换为expression式树,所以会遇到这种types的exception。 而翻译过程不能识别DateTime.Now.Subtract方法。

事实上,通过devise,LINQ to Entities需要将整个查询转换为SQL语句。 这是无法识别减法的地方。 只要您尝试在查询中使用C#/ VB方法,就会发生这种情况。 在这些情况下,您必须找出一种方法来从查询中找出这个部分。 这篇文章解释了更多: http : //mosesofegypt.net/post/LINQ-to-Entities-what-is-not-supported.aspx

您可以在模型中定义新的属性:

  public DateTime StartDate{ get; set; } public DateTime EndDate{ get; set; } public TimeSpan CalculateTime{ get { return EndDate.Subtract(StartDate); } } 

现在,你可以使用类似的东西:

 var query = from temp in db.Table select new MyModel { Id = temp.Id, Variable1 = temp.Variable1, ... EndDate = temp.EndDate, StartDate = temp.StartDate } 

当你看结果时,你可以使用返回如:

 return query 

现在,在查询中,我们有CalculateTime(在EndDate和Startdate之间减去)。