gpt4 book ai didi

linq-to-sql - 执行这两个 foreach 循环的最有效方法是什么?

转载 作者:行者123 更新时间:2023-12-03 22:20:16 26 4
gpt4 key购买 nike

我不确定这是执行以下代码的最佳方法。我不会被另一个 foreach 中的 foreach 所吸引。使用 Linq 可以*更好**吗?

*我知道更好的可能是
a) 性能更高
b) 更容易阅读/更优雅
c) 以上所有

注意:接受 .NET 3.5 解决方案:)注意2:两个 IList 是通过 Linq2Sql 的多记录集存储过程的结果。

这是令人相信的代码:

// These two lists are the results from a IMultipleResults Linq2Sql stored procedure.
IList<Car> carList = results.GetResult<Car>().ToList();
IList<Person> people = results.GetResult<Person>().ToList();

// Associate which people own which cars.
foreach(var person in people)
{
var cars = (from c in cars
where c.CarId == person.CarId
select c).ToList();

foreach (var car in cars)
{
car.Person = person;
}
}

干杯:)

最佳答案

我认为性能不会有任何不同,但如果您追求简洁:

var q = from person in people
join car in cars on person.CarId equals car.CarId
select new { car, person };
foreach(var o in q)
{
o.car.Person = o.person;
}

编辑:在乔恩暗示这个版本更快之后,我很好奇并分析了这两个函数。这个版本看起来快了一倍,这真是太神奇了。我检查了拆解。原始实现的开销似乎来自于为外部和内部循环创建新的枚举器,导致 P 倍 new/dispose 开销。

对于这段代码,只创建了一个枚举器,我认为这是“Join”函数的魔力。不过我没有研究它是如何工作的。

关于linq-to-sql - 执行这两个 foreach 循环的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com