【发布时间】:2018-03-02 18:51:31
【问题描述】:
我有一个按 LINQ 调用的组,然后将 PossessionTime.Tick 值求和为一个新的时间跨度。这以前工作得很好,但现在我需要将集合保留为 IQueryable 而不是 List。
PossessionTime = new TimeSpan(x.Sum(p => p.PossessionTime.Ticks))
通过此更改,我现在收到以下错误:
LINQ 仅支持无参数构造函数和初始化程序 到实体。
我已经研究过使用DbFunctions,但它没有任何可以帮助我的东西。
我唯一的选择是将列表移动到内存中并总结那里的时间吗?
IQueryable 如下:
return stats.GroupBy(x => x.Id).OrderByDescending(x => x.Sum(a => a.Kills))
.Select(x => new WeaponItem
{
PossessionTime = new TimeSpan(x.Sum(p => p.PossessionTime.Ticks))
});
我需要将它保留为 IQueryable,因为我在分页中使用它。
【问题讨论】:
-
好好看看docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/…。您提到的问题可能与这里的代码无关,但事实上此时需要一个具体的值,即总和,因此所有惰性链都被评估。也许是分组?如果没有更多代码,我不会知道。什么是调用堆栈?
-
您需要显示
IQueryable。x是什么?它是如何定义的? -
现在更新@NetMage
标签: c# .net linq linq-to-entities timespan