0

私はEF4を使用しています。 2つのエンティティを持つ: Person {Name} Hobbys {Person.Name、IsCoolHobby} 1人は複数のホビーを持つことができます。LINQ2Entityの1対多のネストされた場所

私は今

IQueryable<Person> p; 
p = container.PersonSet.Include("Hobbys").AsQueryable(); 
p = p.Where(x => x ?????); 
List<Person> tmp = p.ToList(); 

はどのようにクールhobbys(IsCoolHobby == true)を持っているのみ者を返すことができていますか?私は参加してみましたが、私は、リストにそれらをロードすることができませんでした(唯一の人、趣味や新しいタイプを返すことができます選択する - しかし、実体が再びオブジェクトにマッピングする方法?)

おかげ

答えて

2

どのようにすることができます私はクールなホビーを持っている人だけを返します(IsCoolHobby == true)?

List<Person> tmp = container.PersonSet.Include("Hobbys") 
    .Where(p => p.Hobbys.Any(h => h.IsCoolHobby)) 
    .ToList(); 

このことは、少なくとも1つのクールな趣味を持っていますが、それらの人々のためのHobbysコレクションは常にすべて hobbys、また、かっこ悪いhobbysが含まれています人々をロードします。

編集

残念ながら、積極的なロード(Include)中のフィルタリングやソートの子供たちは、現在サポートされていません。 request on the EF feature suggestion page for this featureがあります。リクエストには「Under review」というステータスがありますので、将来的に実装される可能性が少しあります。 (おそらく遠い未来:。少なくとも、MSDNのEF 5(ベータ版)についての最初のドキュメントは、フィルタリング/並べ替えと積極的なロードがまだ実装されていないことを明示的に言う)

今のところ唯一の2つの回避策があります。

var projectedData = container.PersonSet 
    .Where(p => p.Hobbys.Any(h => h.IsCoolHobby)) 
    .Select(p => new 
    { 
     Person = p, 
     CoolHobbys = p.Hobbys.Where(h => h.IsCoolHobby) 
    }) 
    .ToList(); 

結果はクールhobbysとこれらのクールなhobbysのコレクションを持っているユーザーが含まれている匿名オブジェクトのコレクションです:最初は、投影を使用することです。クエリでNoTrackingオプションを使用してチェンジトラッキングを無効にしない場合、人のhobbysコレクションに自動的に結果が入力されます。あなたがEntityObjectを使用している場合

  • CreateSourceQueryEntityCollection秒、すなわち上でのみ提供されています:ここで注意することは

    List<Person> tmp = container.PersonSet 
        .Where(p => p.Hobbys.Any(h => h.IsCoolHobby)) 
        .ToList(); 
    foreach (var person in tmp) 
    { 
        person.Hobbys.Attach(person.Hobbys.CreateSourceQuery() 
         .Where(h => h.IsCoolHobby).ToList()); 
    } 
    

    2つのこと:

    2番目のオプションは、CreateSourceQueryと「明示的な」ロードを使用することです派生した実体。 EF 4.0のPOCOエンティティでは使用できません。 Query()メソッド

  • 上記のコードは、データベースへの1 + N回のラウンドトリップを表します。最初はホビーを持たない人物収集のためのもので、もう1つは追加ですクールなホビーを読み込むための人のクエリ。
+0

ありがとうございました。すべてのPersonをロードし、クールなホビーだけをロードすることは可能ですか?(申し訳ありませんが、適切であると指定されています) Personは少なくとも1つの趣味を持っているとします。 – damike

+0

@damike:上記のEditを参照してください。 – Slauma

+0

おかげさまで、ありがとうございました:-) – damike

関連する問題