有条件包含的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的东西。

即这给你你想要的条件包括。

希望这可以帮助

亚历克斯