2017-02-13 61 views
1

我有低於此查詢,但我不知道如何編寫查詢,以便我不必通過每個yogaSpace循環,並運行一個單獨的查詢。多個兒童實體框架LINQ查詢

我想在一個查詢中一次全部運行它。 FYI - yogaprofile有一對一的yogaspaces。 yogaspaces與yogaspaceevents有一對多關係。而且我想要從單個yogaprofile的所有yogaspaces的所有yogaspaceevents。

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

的【如何包括實體框架5個孩子對象的子對象(可能的複製http://stackoverflow.com:這樣你就可以得到結果,你是從服務器端執行一個查詢期待/問題/ 13047845 /如何對包括-A-子對象,兒童對象的實體框架-5) – Amy

回答

2

YogaSpaces開始您的查詢DbSet。

//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)))