Ответ 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.
т.е. это дает вам то, что вы хотите условно включить.
Надеюсь, что это поможет