我们有以下两个非常棒的查询。它们在各方面都是相同的,但有一个:其中一个指向代表 Entity Framework 到我的本地 SQL 服务器的连接的 IQueryable,另一个代表一个 List,理论上它包含完全相同的数据。
var databaseQuery = db.Table.First(Test);
var listQuery = list.First(Test);
在这种情况下,我以以下方式创建列表:
var list = db.Table.ToList();
没有什么花哨。我只想通过用几百兆内存换取我一生中半个小时的时间来改善我的开发机器上查询的糟糕性能。只有一个小问题:
var listQuery = list.First(Test);
我总是,总是,总是在那条线上得到一个例外,就在那里,说序列不包含匹配的元素。
到底是怎么回事?
编辑:既然你问得很好,本例中的测试比较了两个 long 的值。
进一步编辑:这是直接从 IDE 截取的实际代码。这个 .First() 被添加到 IQueryable 或 IEnumerable 的末尾——内存中的实体堆或到数据库的链接。
.First(v =>
v.UserID == mm.SystemUserId
&& validMerchants.Contains(v.ActualMerchantId.Value));
Slauma:我没有说它永远不会为空。我只是说它为 null 会引发不同的异常。(你知道,这是有道理的。)
看来我得想办法加快速度了。