具有条件包含的EF查询

时间:2009-10-08 03:18:48

标签: entity-framework

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

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

1 个答案:

答案 0 :(得分:38)

我一直在计划写a tip,但你的问题让我感到震惊。

假设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身份解析确保如果多个WorkItem符合条件,则会多次返回相同的WorkItemNotes(按引用)。

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

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

然后,如果你现在这样做:

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

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

这是因为有一种叫做“关系修正”的东西。

即。这为你提供了你想要的条件包括。

希望这有帮助

Alex