我在寻找将嵌套的foreach代码重构为Linq的方法时遇到了麻烦,主要是因为它包含了一个IF-Else子句。
以下是我的代码的简化版本。如何将IF..Else包含在linq语句中?
感谢您的建议。
List<hierarchy> PredomHierarchy;
List<hierarchy> RecesesHierarchy;
foreach x in PredomHierarchy{
foreach y in RecesesHierarchy{
if(x.name = y.name){
Dosomething(x.name, y.name);
} else {
DosomethingElse(x.name, y.name);
}
}
}
答案 0 :(得分:0)
你不能(也不应该)在LINQ中做for each
。有关原因,请参阅https://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx。
但是,您所做的是交叉产品(或carthesian产品)。你可以这样表达:
from x in PredomHierarchy
from y in RecesesHierarchy
select new {x,y}
然后只是迭代结果集合:
.ToList().ForEach(item => {if (item.x.name == item.y.name) DoSomething(x,y); else DoSomethingElse(x,y);});
在那时,你可以通过嵌套的for each
电话更好地 。