我有以下代码
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)) 不受支持。
我做错了什么?
答案 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);