5

我有以下代码

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() 我得到这个错误

表达式 ((((Convert(DateDiff("dd", [10007].PrimaryInsured.DoB, 26/04/2012 15:03:09)) / 365) >= 65) 和 ((Convert(DateDiff("dd ", [10007].PrimaryInsured.DoB, 26/04/2012 15:03:09)) / 365) >= 65)) 和 ((Convert(DateDiff("dd", [10007].PrimaryInsured.DoB, 26) /04/2012 15:03:09)) / 365) <= 69)) 不受支持。

我究竟做错了什么?

4

3 回答 3

6

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

于 2012-04-26T15:20:52.120 回答
3

我了解与 EF 4.1 相关的原始问题,但请注意 EF6 中的 EntityFunctions 现在已过时(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)。

于 2015-06-17T15:15:53.300 回答
2

带有 linq to Entity 的 DateDiff 函数如下所示

如果你想

Day difference 
EntityFunctions.DiffDays(startDate , endDate);

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

Minuutes diff ->
EntityFunctions.DiffMinutes(startDate , endDate);
于 2014-11-28T04:29:16.783 回答