具有条件包含的EF查询

Est*_*aya 22 entity-framework

我有两个表:一个WorkItem表和一个WorkItemNote表.如何返回符合特定条件的WorkItem和所有WorkItemNotes?

我认为这应该很简单,几乎就像有条件的"包含"一样,对吧?

Ale*_*mes 38

我一直在计划写一个关于此的提示,但你的问题让我打了一拳.

假设WorkItem有很多WorkItemNotes

你可以这样做:

var intermediary = (from item in ctx.WorkItems
              from note in item.Notes
              where note.SomeProp == SomeValue
              select new {item, note}).AsEnumerable();
Run Code Online (Sandbox Code Playgroud)

这会为每个WorkItemNote匹配产生一个匿名元素,并保持相应的元素WorkItem.

EF标识解析确保WorkItem如果其具有WorkItemNotes与标准匹配的多个,则多次返回相同(通过引用).

我假设接下来你想回到刚好WorkItems,就像这样:

var workItems = intermediary.Select(x => x.item).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

那么如果你现在这样做:

foreach(var workItem in workItems)
{
   Console.WriteLine(workItem.Notes.Count)
}
Run Code Online (Sandbox Code Playgroud)

您将看到WorkItemNotes与原始过滤器匹配的内容已添加到每个过滤器的Notes集合中workItem.

这是因为称为关系修复的东西.

也就是说,这给了你想要条件的东西.

希望这可以帮助

亚历克斯

  • 亚历克斯:我希望我能给你更多的赞成票; 这就像一个魅力!我还使用了#22提示包含WorkItemNote的相关对象.再次感谢! (4认同)
  • 两年多以后,这仍然在帮助人们!谢谢.我们有机会得到一个包含本地实现条件的.Include吗? (4认同)