我在一个列表中有大约 20 万条记录,我正在遍历它们并形成另一个集合。这在我的本地 64 位 Win 7 上运行良好,但是当我将它移动到 Windows Server 2008 R2 时,它需要很多时间。差不多有一个小时左右的差别!
我尝试查看已编译的查询,但仍在弄清楚。
由于各种原因,我们无法进行数据库连接并检索子值
这是代码:
//listOfDetails is another collection
List<SomeDetails> myDetails = null;
foreach (CustomerDetails myItem in customerDetails)
{
var myList = from ss in listOfDetails
where ss.CustomerNumber == myItem.CustomerNum
&& ss.ID == myItem.ID
select ss;
myDetails = (List<SomeDetails>)(myList.ToList());
myItem.SomeDetails = myDetails;
}
最佳答案
我会这样做:
var lookup = listOfDetails.ToLookup(x => new { x.CustomerNumber, x.ID });
foreach(var item in customerDetails)
{
var key = new { CustomerNumber = item.CustomerNum, item.ID };
item.SomeDetails = lookup[key].ToList();
}
这段代码的最大好处是它只需要循环一次
listOfDetails
来构建查找——这只不过是一个哈希映射。之后我们只使用键来获取值,这非常快,因为这是构建哈希映射的目的。关于c# - 优化 LINQ to Objects 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12374334/