EF Query с условным включением - PullRequest
22 голосов
/ 08 октября 2009

У меня есть две таблицы: таблица WorkItem и таблица WorkItemNote. Как вернуть WorkItem и все WorkItemNotes, которые соответствуют определенным критериям?

Я думаю, это должно быть просто, почти как условное "Включить", верно?

1 Ответ

38 голосов
/ 08 октября 2009

Я планировал написать подсказку по этому вопросу, но ваш вопрос превзошел меня.

Предполагая, что WorkItem имеет много WorkItemNotes

Вы можете сделать это:

var intermediary = (from item in ctx.WorkItems
              from note in item.Notes
              where note.SomeProp == SomeValue
              select new {item, note}).AsEnumerable();

Это создает анонимный элемент для каждого WorkItemNote, который соответствует, и также содержит соответствующий WorkItem.

Разрешение идентификации EF гарантирует, что один и тот же WorkItem (по ссылке) возвращается несколько раз, если он имеет несколько WorkItemNotes, которые соответствуют критериям.

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

var workItems = intermediary.Select(x => x.item).Distinct().ToList();

Тогда, если вы сейчас сделаете это:

foreach(var workItem in workItems)
{
   Console.WriteLine(workItem.Notes.Count)
}

Вы увидите, что WorkItemNotes, которые соответствуют исходному фильтру, были добавлены в коллекцию Notes каждого workItem.

Это из-за того, что называется Исправление отношений.

т.е. это дает вам то, что вы хотите условно включить.

Надеюсь, это поможет

Alex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...