2009-04-11 13 views
1

SubMenus(同じタイプのメニューなのでSubMenusとItemsも持つことができます)とItems(異なるタイプ)を持ち、2つテーブル(メニュー用とアイテム用)。 LINQ to SQLを使用してMenuクラス(そのすべてのSubMenusとItems)の完全なグラフをロードする方法はありますか?LINQを使用してSqlから完全なグラフをロードしています

答えて

0

SQLでリレーションシップを適切に定義すると、LINQToSQLはメニューのすべてのメニュー/項目を単一のクエリで戻す必要があります。しかし、これはグラフとして使用するのではなく、メニューの列挙(関連するメニューや項目を含む)として使用します。この列挙を繰り返して、グラフを独自に構築する必要があります。

一方で、あなたはこのような何かを行うことができるかもしれない:

var roots = db.Menus.Where(m => !m.SubMenus.Count == 0); 

その後、rootsは基本メニューのコレクションになります。これは、グラフ分析アルゴリズムを実行するつもりはないが、GUIコンポーネントを構築するために上から下に向かってトラバースするつもりであれば十分です。

+0

DataContractSerializerを使用してグラフ全体をXMLファイルにシリアル化したいので、すべてのオブジェクトをロードする必要があると思います。 LoadOptionsを何とか使って熱心にロードできますか? – mrtaikandi

+0

要素の代わりにグラフ構造をシリアル化する場合は、実際のグラフを作成する必要があると思います。列挙では、共有メニューの親/子プロパティに要素が重複して表示されます。あなたのDBMLをチェックしてください。リレーションは既に熱心に読み込まれているかもしれません。 – tvanfosson

+0

要素をシリアル化する必要があります。 – mrtaikandi

関連する問題