具有条件包含的EF查询

entity-framework

我有两个表:一个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 ,则多次返回相同的WorkItem (通过引用)。

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

var workItems = intermediary.Select(x => x.item).Distinct().ToList();

那么如果你现在这样做:

foreach(var workItem in workItems)
{
   Console.WriteLine(workItem.Notes.Count)
}

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

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

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

希望这可以帮助

亚历克斯




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因