嵌套转换Foreach源到LINQ [英] Convert Nested Foreach to Linq

查看:95
本文介绍了嵌套转换Foreach源到LINQ的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想重新写以下使用LINQ

 的foreach(WMCommon.Services.StakeOut.assembly屁股组件)
{
的foreach(合计VAR AGG)
{
如果(agg.catagory.unitActn == ass.unitActn&放大器;&安培;
agg.catagory。 unitCode == ass.unitCode&放大器;&安培;
agg.catagory.unitLength == ass.unitLength

{
ass.quantity = agg.qty;
}
}
}

这是据我得到:

  assemblies.Where(A => a.quantity =(aggregate.Where(p => p.catagory .unitActn == a.unitActn&放大器;&放大器; p.catagory.unitCode == a.unitCode&放大器;&放大器; p.catagory.unitLength == a.unitLength)。选择(S => s.qty))); 

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


解决方案

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




在一般情况下,LINQ是不会提高你的表现,除非你改变它如何作品。 LINQ有效刚刚执行的迭代你。



在这种情况下,看来你可以只使用一个连接来改善这个整体,因为这将会给你同样的效果:

  VAR的查询=从WMCommon.Services.StakeOut.assembly屁股组件
加入合计$ AGG新b $ b {ass.unitActn,ass.unitCode,ass.unitLength}等于新的{(agg.catagory.unitActn,agg.catagory.unitCode,agg.catagory.unitLength}
选择新的{屁股,AGG };

的foreach(VAR对查询)
pair.ass.quantity = pair.agg.qty;


I am trying to re-write the following using 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;
    }
  }
}

This is as far as I got:

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

Thank for your help in advance. I am hoping that the LINQ will be much faster than nested FOREACH?

解决方案

I am hoping that the LINQ will be much faster than nested FOREACH?

In general, LINQ isn't going to improve your performance unless you change how it works. LINQ is effectively just performing the iterations for you.

In this case, it appears you could just use a join to improve this overall, as this is going to give you the same effect:

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;

这篇关于嵌套转换Foreach源到LINQ的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆