【发布时间】:2013-12-18 16:40:13
【问题描述】:
不使用 ToList() 有什么方法可以避免“查询的结果不能被枚举多次”异常?
这是我的代码的简化版本:
var entities = _db.Trades.Where(t => t.A > 10);
int totalCount = entities.Count();
entities = entities.Where(t => t.B > 10);
int totalCountAfterAdditionalFilter = entities.Count();
出于性能考虑,我无法调用 ToList()。我知道我可以再生成一个 IQueryable,但这似乎是错误的(我有更多这样的过滤器)。在我第一次调用 Count() 之后,我能否以某种方式保留/复制 IQueryable?
谢谢!
【问题讨论】:
-
“由于性能方面的考虑,我不能打电话给
ToList()”什么性能方面的考虑?查询需要在某个时候具体化 - 为什么不在List中? -
我有超过 100 万条记录。在这个阶段将它们全部加载到内存中似乎是错误的。在应用最终过滤器之前,我只想获得计数。过滤完成后,我将具体化查询,它将仅返回 10 条左右的记录。
-
您真的需要知道这两个计数,还是只需要知道是否过滤掉了任何项目?你可以只过滤
t.B <= 10,如果有任何项目,两者都不一样,你就有答案了。如果你真的需要完整的计数,那是行不通的。 -
Servy,在这种情况下,两个计数都需要
标签: c# entity-framework