[英]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.