【发布时间】:2009-10-08 03:18:47
【问题描述】:
我有两个表:一个 WorkItem 表和一个 WorkItemNote 表。如何返回一个 WorkItem 和所有符合特定条件的 WorkItemNotes?
我认为这应该很简单,几乎就像一个条件“包含”,对吧?
【问题讨论】:
标签: entity-framework
我有两个表:一个 WorkItem 表和一个 WorkItemNote 表。如何返回一个 WorkItem 和所有符合特定条件的 WorkItemNotes?
我认为这应该很简单,几乎就像一个条件“包含”,对吧?
【问题讨论】:
标签: entity-framework
我一直计划就此写信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 集合中。
这是因为所谓的关系修复。
即这为您提供了您想要的条件包含。
希望对你有帮助
【讨论】: