这两个foreach循环最有效的方法是什么?

时间:2009-03-12 05:20:36

标签: linq-to-sql .net-3.5 foreach

我不确定这是执行以下代码的最佳方式。我不是在另一个foreach的foreach中出售的。这可以用Linq做得更好**吗?

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

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

这是make believe代码:

// 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;    
    }
}

干杯:)

1 个答案:

答案 0 :(得分:6)

我不认为表现有任何不同,但如果你正在寻找简洁性:

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; 
}

编辑:在Jon对这个版本的提示更快之后,我很好奇并且描述了这两个功能。这个版本看起来快两倍,令人惊叹。我检查了拆卸。原始实现的开销似乎来自为外部和内部循环创建的新枚举器,导致P次新/处置开销。

对于此代码,只创建了一个枚举器,我认为这是“加入”功能的神奇之处。我没有检查它是如何工作的。