This question促使我想知道以下幾點:與將ToList()添加到Linq-to-Sql查詢有關的'gotchas'是什麼?
什麼是與套結對ToList()到LINQ到SQL查詢相關的「陷阱」?
我對最佳實踐和軼事同樣感興趣。
This question促使我想知道以下幾點:與將ToList()添加到Linq-to-Sql查詢有關的'gotchas'是什麼?
什麼是與套結對ToList()到LINQ到SQL查詢相關的「陷阱」?
我對最佳實踐和軼事同樣感興趣。
忽視交易:
using (PlayerDataContext context = new PlayerDataContext())
{
var players = context.Players.ToList();
MethodThatUnexpectedlyTakes25SecondsToComplete();
Console.WriteLine(players.Count()); // Outputs a stale count
}
最大的一個是延遲執行的損失。除非您對結果進行迭代,否則linq查詢通常不會執行任何操作。調用.ToList()遍歷結果,因此將立即運行查詢。
妥協LINQ到SQL的能力,以優化:
using (PlayerDataContext context = new PlayerDataContext())
{
// suboptimal
var players = context.Players.ToList();
Console.WriteLine(players.Count());
// optimal
var playerCount = context.Players.Count();
Console.WriteLine(playerCount);
}
我實在不明白那是怎麼回事了「疑難雜症」。 ToList()明確地將玩家的實體複製到列表中。這就是ToList在任何IEnumerable上所做的事情。 –
2009-07-17 14:35:08
我不同意這是陳舊的...這是一個絕對100%的列表中的項目數量的最新,這是你要求它做的...這只是斷開的數據。 – 2009-07-17 14:36:21