Простой фильтр 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
собственность в пункте, где.