在mvc应用程序中,我有一个由以下结构组成的菜单
public class MenuItem
{
public string Action {get;set;}
public string Controller {get;set;}
public string Text {get;set;}
public List<MenuItem> Children {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
考虑一个简单的compisition
Root
\-Item1
\-Item2
\-Item2_1
\-Item2_2
\-Item_2_2_1
\-Item_2_2_2
\-Item3
Run Code Online (Sandbox Code Playgroud)
我想获取项目Item_2_2_2(认为它有Action ="Index",Controller ="ABC")
我如何编写一个函数(或更好的T的扩展方法)来迭代收集并获得与该条件匹配的项目?
谢谢
您可以编写一个扩展方法来"展平"层次结构......
public static IEnumerable<T> Flatten<T>(this T value, Func<T, IEnumerable<T>> inner) {
foreach (var i in inner(value)) {
foreach (var j in Flatten(i, inner)) {
yield return j;
}
}
yield return value;
}
Run Code Online (Sandbox Code Playgroud)
...然后使用普通的LINQ:
items.Flatten(i => i.Children).Where(i => ...
Run Code Online (Sandbox Code Playgroud)