有条件包含的EF查询
我有两个表:一个WorkItem表和一个WorkItemNote表。 如何返回符合特定条件的WorkItem和所有WorkItemNotes?
我认为这应该是简单的,几乎就像一个有条件的“包含”,对吗?
我一直在计划写一个小贴士 ,但你的问题打我。
假设一个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标识具有多个与条件匹配的WorkItemNotes
,则EF标识解决方法将确保相同的WorkItem
(通过引用)多次返回。
我假设接下来你想回到刚才的WorkItems
,就像这样:
var workItems = intermediary.Select(x => x.item).Distinct().ToList();
那么如果你现在这样做:
foreach(var workItem in workItems) { Console.WriteLine(workItem.Notes.Count) }
您将看到与原始filter相匹配的WorkItemNotes
已被添加到每个workItem
的Notes集合中。
这是因为关系Fixup的东西。
即这给你你想要的条件包括。
希望这可以帮助
亚历克斯