Linq to Entities SqlFunctions.DateDiff不受支持

我有以下代码

DateTime now = DateTime.UtcNow; var allItemsOver64 = _inventoryContext.Items.Where(i => (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now) / 365.0) >= 65); IQueryable 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)> = 65)和((转换(DateDiff(“dd) “,[10007] .PrimaryInsured.DoB,26/04/2012 15:03:09))/ 365)> = 65))和((转换(DateDiff(”dd“,[10007] .PrimaryInsured.DoB,26 / 04/2012 15:03:09))/ 365)<= 69))不受支持。

我究竟做错了什么?

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

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

如果你想

 Day difference EntityFunctions.DiffDays(startDate , endDate); Hours diff -> EntityFunctions.DiffHours(startDate , endDate); Minuutes diff -> EntityFunctions.DiffMinutes(startDate , endDate); 

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