2016-05-30 4 views
1

Я пытаюсь получить все объекты, где Чайлдс ParentID приравнивает идентификатор страницы я наГде на ребенка родительского объекта

Это то, что я пытаюсь сделать:

public IEnumerable<Route> GetAll(int locationId) 
{ 
    _db.Configuration.ProxyCreationEnabled = false; 
    return _db.Routes.Include(o => o.ConnectionPointRoutes.Select(s => s.Segment)) 
      .Include(o => o.ConnectionPointRoutes.Select(c => c.ConnectionPoint) 
      .Where(c => c.Location.LocationId == locationId)).ToList(); 
} 

, но я получаю эта ошибка:

исключение типа «System.ArgumentException» произошло в EntityFramework.dll, но не был обработан в пользовательском коде

Дополнительная информация: выражение Include path должно ссылаться на свойство навигации , определенное для типа. Используйте пунктирные пути для свойств ориентировочной навигации и оператора Select для коллекции свойства навигации.

Любые мысли?

+1

Похоже c.Location является объект списка, так что вам нужно c.Location.Select (х => ......). У вас есть таблица с несколькими поколениями, такая как идентификатор Grand-Grand-Parent, Grand Parent ID, родительский идентификатор, идентификатор ребенка? Если это так, вам может понадобиться использовать рекурсивный алгоритм для получения всех уровней. Linq будет работать только для одного поколения. – jdweng

+1

Я не думаю, что 'Where' поддерживается внутри' Include'. –

+0

Я нашел способ его исправить, проверить ответ, если вам интересно :) –

ответ

0

я в конечном итоге делает это:

public IEnumerable<Route> GetAll(int locationId) 
    { 
     return _db.Routes 
      .Include(o => o.ConnectionPointRoutes.Select(s => s.Segment)) 
      .Include(o => o.ConnectionPointRoutes.Select(c => c.ConnectionPoint)) 
      .Where(c => c.ConnectionPointRoutes.Select(s => s.ConnectionPoint.Location) 
      .FirstOrDefault(q => q.LocationId == locationId).LocationId == locationId) 
      .ToList(); 
    } 
Смежные вопросы