Linq to Entities SqlFunctions.DateDiff不受支持

时间:2012-04-26 15:14:40

标签: c# linq linq-to-entities entity-framework-4.1

我有以下代码

DateTime now = DateTime.UtcNow;

var allItemsOver64 = _inventoryContext.Items.Where(i => 
   (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now) / 365.0) >= 65);

IQueryable<Item> items65To69 = allItemsOver64.Where(i =>
   (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now) / 365.0) >= 65 &&
   (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now) / 365.0) <= 69);

但是当我尝试使用allItemsOver64因此Items65To69.Count()时出现此错误

  

表达方式   ((((转换(DateDiff(“dd”,[10007] .PrimaryInsured.DoB,26/04/2012 15:03:09))/ 365)&gt; = 65)   和   ((转换(DateDiff(“dd”,[10007] .PrimaryInsured.DoB,26/04/2012 15:03:09))/ 365)&gt; = 65))   和   ((转换(DateDiff(“dd”,[10007] .PrimaryInsured.DoB,26/04/2012 15:03:09))/ 365)&lt; = 69))   不受支持。

我做错了什么?

3 个答案:

答案 0 :(得分:6)

也许您可以尝试使用EntityFunctions而不是SqlFunctions。

答案 1 :(得分:3)

我理解与EF 4.1相关的原始问题,但只是注意到EntityFunctions现在在EF6(https://msdn.microsoft.com/en-us/library/system.data.entity.core.objects.entityfunctions%28v=vs.113%29.aspx)中已经过时,因此如果定位EF6(https://msdn.microsoft.com/en-us/library/system.data.entity.dbfunctions%28v=vs.113%29.aspx),则应该使用DbFunctions。

答案 2 :(得分:2)

使用linq to Entity的DateDiff函数如下所示

如果你想

Day difference 
EntityFunctions.DiffDays(startDate , endDate);

Hours diff ->
EntityFunctions.DiffHours(startDate , endDate);

Minuutes diff ->
EntityFunctions.DiffMinutes(startDate , endDate);