【发布时间】:2015-01-27 08:44:24
【问题描述】:
我有一个带有 ID 的列表:
var myList = new List<int>();
我想从 db 中选择所有具有 myList id 的对象:
var objList= myContext.MyObjects.Where(t => myList.Contains(t.Id)).ToList();
但是当myList.Count > 8000 我得到一个错误:
查询处理器用尽了内部资源,无法 生成查询计划。这是一个罕见的事件,只预计 极其复杂的查询或引用非常大的查询 表或分区的数量。请简化查询。如果你 相信您错误地收到了此消息,请联系客户 支持服务了解更多信息。
我认为这是因为我使用了Contains()。我可以用什么来代替 Contains?
【问题讨论】:
-
您可以尝试避免
ToList和结尾并在需要时产生结果吗? -
@Vignesh.N - 结果仍然需要构建查询计划,所以我认为这不会改变结果。
-
关于这件事有一个open bug on connect。
-
您可以将列表拆分为具有较少元素的几个子列表并运行单独的查询。
-
myList 从何而来?如果它以某种方式来自数据库,您应该可以加入它。
标签: c# linq sql-server-2008-r2