有条件包含的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的东西。
即这给你你想要的条件包括。
希望这可以帮助
亚历克斯