将Nested Foreach转换为Linq

Nic*_*vic 3 c# linq

我正在尝试使用LINQ重写以下内容

foreach (WMCommon.Services.StakeOut.assembly ass in assemblies) 
{
  foreach (var agg in aggregate) 
  {
    if ( agg.catagory.unitActn   == ass.unitActn   &&
         agg.catagory.unitCode   == ass.unitCode   &&
         agg.catagory.unitLength == ass.unitLength
    ) 
    {
      ass.quantity = agg.qty;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的:

assemblies.Where( a => a.quantity = ( aggregate.Where( p => p.catagory.unitActn == a.unitActn && p.catagory.unitCode == a.unitCode && p.catagory.unitLength == a.unitLength).Select(s=>s.qty)));
Run Code Online (Sandbox Code Playgroud)

提前感谢您的帮助.我希望LINQ比嵌套的FOREACH快得多?

Ree*_*sey 7

我希望LINQ比嵌套的FOREACH快得多?

通常,LINQ不会改善您的性能,除非您改变它的工作方式.LINQ实际上只是为您执行迭代.

在这种情况下,看起来您可以使用连接来改善整体效果,因为这会给您带来相同的效果:

var query = from WMCommon.Services.StakeOut.assembly ass in assemblies
            join agg in aggregate
            on new { ass.unitActn, ass.unitCode, ass.unitLength } equals new { (agg.catagory.unitActn, agg.catagory.unitCode, agg.catagory.unitLength }
            select new { ass, agg };

foreach(var pair in query)
    pair.ass.quantity = pair.agg.qty;
Run Code Online (Sandbox Code Playgroud)