重构IF ... ELSE到LINQ的嵌套foreach

时间:2014-03-01 19:02:50

标签: linq if-statement foreach refactoring

我在寻找将嵌套的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);
  }
 }
}

1 个答案:

答案 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电话更好地