繁体   English   中英

具有条件包含的EF查询

[英]EF Query With Conditional Include

我有两个表:一个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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM