2017-02-13 4 views
1

У меня есть этот запрос ниже, но я не уверен, как написать запрос, чтобы мне не нужно было прокручивать каждый yogaSpace и запускать отдельный запрос.Entity Framework linq-запрос для нескольких дочерних объектов

Я хотел бы запустить все сразу в одном запросе. FYI - yogaprofile имеет один-много с yogaspaces. yogaspaces имеет один-много с yogaspaceevents. И я хочу, чтобы все yogaspaceevents из всех yogaspaces из одного yogaprofile.

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

Возможный дубликат [Как включить объект ребенку дочернего объекта в Entity Framework 5] (http://stackoverflow.com/вопросы/13047845/как к включать-а-ребенок-объекты-ребенок-объект-в-сущность-каркасные 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))) 

 Смежные вопросы

  • Нет связанных вопросов^_^