嵌套转换Foreach源到LINQ [英] Convert Nested Foreach to 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屋!