У меня есть две таблицы: таблица WorkItem и таблица WorkItemNote. Как вернуть WorkItem и все теги WorkItem, которые соответствуют определенным критериям?
Я думаю, что это должно быть просто, почти как условное "Включить", правильно?
Ответ 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.
т.е. это дает вам то, что вы хотите условно включить.