これは、here (EF 4.1 code-first: How to load related data (parent-child-grandchild)?)の質問の第2ステップです。 @Slaumaさんの指導で私はデータを取り出すことができました。それは動作しますが、これは、データベースに対して多くのクエリを送信し、私はすべてひとつのクエリでこれを行う方法を探していたEF 4.1コードファースト:インクルードおよび/または選択メソッドを使用するときのナビゲーションプロパティの注文方法
var model = DbContext.SitePages
.Where(p => p.ParentId == null && p.Level == 1)
.OrderBy(p => p.Order) // ordering parent
.ToList();
foreach (var child in model) { // loading children
DbContext.Entry(child)
.Collection(t => t.Children)
.Query()
.OrderBy(t => t.Order) // ordering children
.Load();
foreach (var grand in child.Children) { // loading grandchildren
DbContext.Entry(grand)
.Collection(t => t.Children)
.Query()
.OrderBy(t => t.Order) // ordering grandchildren
.Load();
}
}
:私の最初のコードは、このでした。 (例えば最初のコード上記のように)今
var model2 = DbContext.SitePages
.Where(p => p.ParentId == null && p.Level == 1)
.OrderBy(p => p.Order)
.Include(p => p.Children // Children: how to order theme???
.Select(c => c.Children) // Grandchildren: how to order them???
).ToList();
、どのように私は注文することができ、子供(孫)、それらを選択:@Slaumaの指導によって、私はこの1つのクエリを変更する(上記のリンク上で説明しましたか)?
この質問をご覧ください:http://stackoverflow.com/questions/4156949/ef4-linq-ordering-parent-and-all-child-collections-with-eager-loading-includeあなたがしようとしているのは "熱心な読み込み"です。明らかに、 'OrderBy'を' Include'で使うことはできません。 – devuxer
はい、私は熱心な読み込みについて知っています。最初のコード(自分で作成したもの)を見ると、各レベルの各オブジェクトにforeachステートメントが使用されていることがわかります(子供の場合は先頭、孫の場合は子供)準備されたリンクについて説明したように。これはデータベースに対してより多くのクエリを必要とします!私はこれをすべて1つのクエリで行う方法を探しています。 –
構造全体を読み込み、必要なときにビューで注文することができますか?データアクセスロジックでプレゼンテーションロジック(順序付け)を漏らす必要がある理由はほとんどありません。 –