Свойство навигации сложных запросов LINQ

У меня проблема с получением данных из моей базы данных с помощью LINQ

У меня есть две таблицы Team и TeamMember , которые связаны отношением 1-N . Я использую Entity Framework, и у меня есть одна сущность для каждой таблицы со свойством для каждого столбца. Также в сущности Team есть свойство навигации TeamMember как результат этой связи.

Я хочу сделать запрос, по которому я могу получить всю свою команду с ее членами команды.

result = (from t in this.context.Teams
          orderby t.Name
          select t)
         .Include("TeamMembers")

Это прекрасно работает. Я получаю коллекцию объектов группы со свойством Team.TeamMember , заполненным данными члена каждой команды.

Проблема в том, что я хочу выполнить более сложный запрос, например, отфильтровать запрос для TeamMembers.

Например, в обеих таблицах есть столбец EndDateTime . Если я хочу получить всю команду и членов команды, которые не закончились (время их даты окончания не равно нулю), я не знаю, как это сделать.

С помощью этого запроса я буду фильтровать только команды, но не членов команды.

result = (from t in this.context.Teams
          where t.EndDateTime == null
          orderby t.Name
          select t)
         .Include("TeamMembers")
         .ToList();

Есть идеи?

Я как бы «решаю» это, выполняя фильтрацию члена после запроса к коллекции. Вот так:

//Filter out the End dated care coordiantors
var careCoordinatorsToDelete = new List<CareCoordinator>();
foreach (var team in result)
{
    careCoordinatorsToDelete.Clear();

    foreach (var careCoordinator in team.CareCoordinators)
    {
        if (careCoordinator.EndDateTime != null)
            careCoordinatorsToDelete.Add(careCoordinator);
    }

    foreach (var toDelete in careCoordinatorsToDelete)
    {
        team.CareCoordinators.Remove(toDelete);
    }
}

Но я не думаю, что это хорошее решение.

9
задан user7116 6 October 2011 в 15:11
поделиться