【发布时间】:2013-10-10 14:04:28
【问题描述】:
我有一个 IQueryable 查询,有时我需要以相同的方法使用它。 此查询基于另一个作为参数传递的查询。
我需要将一个值乘以两个日期之间的天数的结果相加。
参数查询 = IQueryable lista;
IQueryable<ChildEntity> query = lista.SelectMany(s => s.ChildEntities).Where(w=>w.IsActive.Equals("Y");
DateTime maxDate = lista.Max(m => m.Date);
decimal value = query.Sum(s => (s.Value) * (maxDate - s.ParentEntity.Date).Days);
这给出了例外:
Specified method is not supported.
我也试过了:
decimal value = query.Sum(s => (s.Value) * SqlMethods.DateDiffDay(maxDate, s.Parent.Date);
还尝试了 SqlFunctions.DateDiff 和 EntityFunctions.DiffDays,最后三个都给了我这个例外:
Method 'System.Nullable`1[System.Int32]
DateDiffDay(System.Nullable`1[System.DateTime], System.Nullable`1[System.DateTime])'
is not supported for execution as SQL.
我不想使用 Enumerable,因为这会导致大量记录。
还有其他方法可以解决这个问题吗?
(顺便说一句,我使用 Devart 作为提供者。)
【问题讨论】:
-
IEnumerable 不是您的问题,因为像 IQueryable 这样的 IEnumerable 仅在实例化时进行评估,只要您删除 Max 日期变量,这不会发生,即 DateTime maxDate = lista.Max(m => m.日期);
-
只要您不阅读列表,它就会将列表定义传递给查询生成器
标签: c# date iqueryable