0

一般的なリストがあります。

このリストの一部の要素は、親要素に属しています。これらすべての要素をデータベースから取得し、それらを使用して再帰的にツリーを構築したいと考えています。

だから、ここに私が考えていることがあります:

これが私の述語です:

public static bool FindChildren(Int32 parentId,CategoryMapping catMapping)
{
    if (catMapping.parentId == parentId)
    {
        return true;
    }
    else
    {
        return false;
    }
}

root = list[0];
root.childrenElements = root.FindAll(FindChildren(root.id,???)

これがどのように機能するかわかりません。どうすればこの種の述語を行うことができますか?

PS:私はVS2005を使用しています:(

4

4 に答える 4

3

試す

root.childrenElements = 
    root
       .Where( i => i.parentId == yourCatMapping.parentId)
       .ToArray();

編集

.net 2.0ではそうだと思います

root.FindAll(
    delegate(CategoryMapping mapping)
        {
             return mapping.parentId == root.Id;
        });
于 2010-03-16T14:47:20.467 に答える
1

Forming good predicate delegates to Find() or FindAll() in a List for C# / .NET 2.0で開始したこのスレッドをチェックしてください。

それはあなたの質問にかなり明確に答えます。

于 2010-03-16T18:31:01.020 に答える
1

FindAll直接関数呼び出しではなく、に渡すデリゲートを指定する必要があります

( と仮定するrootList<CategoryMapping>)

root.childrenElements = root.FindAll(c => FindChildren(root.id, c));
于 2010-03-16T14:47:33.197 に答える
0

次の理由から、グレゴワールの答えが最高です。

  1. LINQ を使用しません (質問者は VS 2005 を使用しています)
  2. ラムダ式を使用しない (これも VS 2005)

Predicate そうは言っても、あなたのためにあなたのためにあなたを生成する関数を書いて、物事を(少し)簡単にしてみませんか?

public static Predicate<CategoryMapping> GetIsChildOf(int parentId) {
    return delegate(CategoryMapping cm) {
        return cm.parentId == parentId;
    };
}

次に、 がありList<CategoryMapping>、特定のプロパティを持つすべての要素を見つけたい場合は、次のparentIdように呼び出すことができます。

root = list[0];
root.childrenElements = list.FindAll(GetIsChildOf(root.id));
于 2010-03-16T18:25:23.740 に答える