Подтвердить что ты не робот

Запрос EF с условным включением

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

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

4b9b3361

Ответ 1

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

Предполагая, что a 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.

Это происходит из-за чего-то называемого отношения Fixup.

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

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

Alex