Простой фильтр Entity Framework по NavigationProperty с использованием методов LINQ

Я изучаю EF и LINQ to EF. Мы используем методы LINQ, а не выражения LINQ.

Я пытаюсь сделать очень простой запрос из моих 2 сущностей.

NavigationGroup - это отношение один ко многим к NavigationGroupLocation. Свойство Navigation в NavigationGroup называется "NavigationGroupLocations"

На мой взгляд, этот код должен работать:

 List<NavigationGroup> groups = db.DataModel.NavigationGroups.Where(g => g.NavigationGroupLocations.Location == 1).ToList();

Местоположение является int в моей сущности NavigationGroupLocation.

Может кто-нибудь объяснить, почему это не работает и как правильно фильтровать по свойству навигации? Я видел много примеров в синтаксисе выражения и не могу связать его с синтаксисом метода.

Я использую C# 4 и EF 4.

Спасибо за помощь!

РЕДАКТИРОВАТЬ

Я вижу, что, поскольку мое свойство навигации является коллекцией, я не могу получить доступ к отдельному свойству. Итак, я пытаюсь этот код:

 .Where(g => g.NavigationGroupLocations.Any(l => l.Location == 1));

Когда я пытаюсь запустить его, я получаю эту ошибку:

 Cannot implicitly convert type 'System.Linq.IQueryable<ME.Data.ECom.NavigationGroup>' to 'System.Data.Objects.ObjectSet<ME.Data.ECom.NavigationGroup>'. An explicit conversion exists (are you missing a cast?)

Что мне делать?

2 ответа

Похоже, это работает:

 var query = db.DataModel.NavigationGroups.Where(g => g.NavigationGroupLocations.Any(l => l.Location == selectedLocation));

Это не работает, когда используется как условный оператор.

 var query = db.DataModel.NavigationGroups;
 if (selectedLocation > 0)
 {
    query = query.Where(g => g.NavigationGroupLocations.Any(l => l.Location == selectedLocation));
 }

Вот когда я получаю ошибку.

Вам нужно сделать вступление. NavigationGroupLocations это список элементов, поэтому вы не можете получить доступ .Location собственность в пункте, где.

Другие вопросы по тегам