2017-02-13 9 views
1

私は以下のこのクエリを持っていますが、私は各yogaSpaceをループして個々のクエリを実行する必要がないようにクエリを書く方法がわかりません。複数の子のエンティティフレームワークlinqクエリ

私は一度にすべてを1つのクエリで実行したいと思います。 FYI - yogaprofileには1対多数のyogaspacesがあります。 yogaspacesはyogaspaceeventsと1対多を持っています。そして私は、すべてのヨーガスペースからのすべてのヨーガスペースイベントを1つのヨーガプロファイルから欲しがっています。

using (var dbContext = new YogabandyContext()) 
     { 
      var yogaProfile = dbContext.YogaProfiles.Where(i => i.ApplicationUserGuid == userId).First(); 
      var yogaSpaces = yogaProfile.YogaSpaces; 
      var today = DateTime.Now.Date; 
      foreach (var yogaSpace in yogaSpaces) 
      { 
       var yogaEvents = yogaSpace.YogaSpaceEvents.Where(k => k.EventDateTime.Date > today.AddDays(-30) && k.EventDateTime < today.AddDays(30)); 
       // do something with the yogaEvents here 
      } 
     } 
+0

可能な複製(http://stackoverflow.com/questions/13047845/include-a-child-objects-entity-in-entity-framework-5) – Amy

答えて

2

YogaSpaces DbSetから開始してください。あなたは、サーバー側で実行される1つのクエリから期待している結果を得ることができるこの方法:[Entity Frameworkの5に子オブジェクトの子オブジェクトを含める方法]の

//Do this outside of your query, a method call can't be translated to sql 
var up= DateTime.Now.Date.AddDays(30); 
var down= DateTime.Now.Date.AddDays(-30); 

var query= dbContext.YogaSpaces 
        .Where(i => i.YogaProfile.ApplicationUserGuid == userId) 
        .SelectMany(i=>i.YogaSpaceEvents.Where(k => k.EventDateTime.Date > down && k.EventDateTime < up)); 
1

これはあなたが探しているものですか?

yogaspaceevents = yogaSpaces.SelectMany(s=>s.YogaSpaceEvents.Where(k 
=> k.EventDateTime.Date > today.AddDays(-30) && k.EventDateTime < today.AddDays(30))) 
関連する問題