2013-08-09 18 views
9
public class Parent 
{ 
    public ICollection<Child> Children {get;set;} 
} 

public class Child 
{  
} 

public class Boy : Child 
{ 
    public Toy Toy {get;set;}  
} 

public class Girl : Child 
{  
    public Book Book {get;set;} 
} 

私はすべての親をロードして、各親のためにすべての子供を熱心に読み込みたいと思っています。多面体の子オブジェクトのプロパティに熱心な負荷

Linqインクルード()を使用してそれをどのように記述しますか?

+0

の可能重複[EF 4.3.1 LinqToEntitiesクエリで継承されたナビゲーションプロパティを含める](http://stackoverflow.com/questions/10705218/ef-4-3-1-include-inherited-navigation-properties-in-linqtoentities-query) –

+0

@ GertArnold、これは重複していません。 'Children'は、多相コレクションであり、継承されたナビゲーションプロパティではありません。イアン、これに対する解決策を見つけましたか?私も見ています。 – Kit

+0

@kit前回私が熱心に読んだのは改善しているようです。私はそれがこれを修正するか分からない。 :) –

答えて

2

Includeで行うことはできませんが、投影を介して行うことができます - EFは、限り、あなたはそれらのエンティティを選択すると、あなたのためのナビゲーションプロパティを配線します(変更の追跡を有効にする必要があります):

var query = db.Parents.Select(p => new 
{ 
    Parent = p, 
    // get the children entities for the parent 
    Children = p.Children, 
    // get the toys for the parent's boys 
    Toys = p.Children.OfType<Boy>().Select(b => b.Toy), 
    // get the books for the parent's girls 
    Books = p.Children.OfType<Girl>().Select(g => g.Book), 
}); 

var results = query.ToArray().Select(at => at.Parent); 
+0

+1ありがとうございます。 'ToArray()'を必要としない方法はありますか?それで 'IQueryable <>'の連鎖可能なメソッドで使うことができますか? – Ergwun

+0

確かに、クエリを列挙した後でなければ、 'at.Parent'に投影することはできません。 – Moho

+0

乾杯。バウンティが授与した - ありがとう:) – Ergwun

関連する問題