2

オブジェクトへのlinqを使用して、再帰ツリー内のすべてのアイテムを再帰的にフィルタリングすることは可能ですか?

これは私が使用しているモデルです。これは別のアプリケーションから提供されたものです

public class Menu
{
   public string Name{get;set;}
   public string Roles{get;set;}
   public List<Menu> Children{get;set;}
}

ユーザーがアプリケーションにログインするとき、メニュー項目で指定されたロールに対してユーザーのロールをチェックする必要があります。for ループを使用してこれをチェックする再帰的なメソッドを記述できることはわかっています。

とにかく、「MenuList.Where(..check the roles)」のように使用してこれを取得します

前もって感謝します

4

2 に答える 2

1

この拡張方法を試してください:

public static IEnumerable<T> Flatten<T, R>(this IEnumerable<T> source, Func<T, R> recursion) where R : IEnumerable<T>
{
    return source.SelectMany(x => (recursion(x) != null && recursion(x).Any()) ? recursion(x).Flatten(recursion) : null)
                 .Where(x => x != null);
}

そして、次のように使用できます。

menu.Flatten(x => x.Children).Where(x => x.Roles.Contains(role));
于 2014-01-10T20:52:28.510 に答える