这是最有效的方法取决于实际数据的情况之一。
第一从数据库获取所有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