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 )。