這是最有效的方法取決於實際數據的情況之一。
第一從數據庫獲取所有partNums:
HashSet<int> partNums = new HashSet<int>(from p in GetTable<DBPart> select p.PartNumber);
foreach(var p in parts)
p.NewPart = partNums.Contains(p.PartNumber);
第二查詢數據庫與相關partNumbers:
HashSet<int> partNums = new HashSet<int>(
from p in GetTable<DBPart> where (from mp in parts select mp.PartNumber).Contains(p.PartNumber) select p.PartNumber);
foreach(var p in parts)
p.NewPart = partNums.Contains(p.PartNumber);
前者將高於在一定數目的行的更有效的數據庫,效率較低,因爲後者需要較長時間來構建更復雜的查詢,但前者會返回所有內容。
另一個因素是預期的命中百分比。如果這個數字是比較低的(即只在列表中的零件數量少會在數據庫中),那麼它可能是更有效地做:
Dictionary<int, Part> dict = partsSource.ToDictionary(p => p.PartNumber, p);
foreach(int pn in
from p in GetTable<DBPart> where (from kv in dict select kv.Key).Contains(p.PartNumber) select p.PartNumber);
dict[pn].NewPart = true;
哪裏partsSource
是通過何種方式列表parts
首先獲得,而不是獲得一個列表,我們獲得一本字典,它可以更有效地檢索我們想要的字典。然而,無論如何我們都會獲得parts
作爲列表,然後我們在這裏不能真正獲得,因爲我們首先使用更多的努力來構建字典,而不是遍歷列表。
零件表的主鍵是什麼?零件號? – 2011-03-26 12:24:28