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

Linq to sql 做这两个foreach循环最有效的方法是什么?,linq-to-sql,.net-3.5,foreach,Linq To Sql,.net 3.5,Foreach,我不确定这是执行以下代码的最佳方法。我不是在一辆车里,在另一辆车里。Linq能做得更好吗 *我知道更好的可能是 更有表现力的人 b更容易阅读/更优雅 c所有上述事项 注:接受的NET 3.5解决方案: 注2:两个ILST是通过Linq2Sql的多记录集存储过程的结果 以下是假装代码: // These two lists are the results from a IMultipleResults Linq2Sql stored procedure. IList<Car> carL

我不确定这是执行以下代码的最佳方法。我不是在一辆车里,在另一辆车里。Linq能做得更好吗

*我知道更好的可能是 更有表现力的人 b更容易阅读/更优雅 c所有上述事项

注:接受的NET 3.5解决方案: 注2:两个ILST是通过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; 
}
编辑:在Jon暗示这个版本更快之后,我开始好奇并分析了这两个函数。这个版本似乎快了一倍,这是惊人的。我检查了拆卸。原始实现的开销似乎来自为外部和内部循环创建的新枚举数,导致P乘以new/dispose开销


对于这段代码,只创建了一个枚举数,我认为这是Join函数的神奇之处。但是我没有检查它是如何工作的。

我相信它会表现得更好,因为它将在连接中使用哈希表-复杂性将是OP+C而不是OPC,我认为。Jon它似乎真的更快。看起来在OP+C和OP*C这两个方面你是对的,因为这个版本在连接运行后创建了一个枚举器,而原始版本使用两个外部/内部枚举器。我把我的发现添加到了答案中。哦,伙计们,还有一个问题。这个答案是否可以更新为一个扩展方法,或者至少是一个静态方法?如果可能的话,让它更通用。这是一个非常简单的代码,我想知道是否有可能做这样的事情。也许不是。如果你把你的代码变成通用代码,我会把我的代码变成通用代码。否则答案和问题不相关。