代码之家  ›  专栏  ›  技术社区  ›  Esteban Araya

带有条件include的ef查询

  •  22
  • Esteban Araya  · 技术社区  · 16 年前

    我有两张表:一张工作项表和一张工作项注释表。如何返回工作项和所有符合特定条件的工作项说明?

    我认为这应该很简单,就像一个有条件的“包含”,对吧?

    1 回复  |  直到 12 年前
        1
  •  38
  •   Alex James    15 年前

    我一直在计划写作 a tip 关于这件事,你的问题让我大吃一惊。

    假设A WorkItem 有许多 WorkItemNotes

    您可以这样做:

    var intermediary = (from item in ctx.WorkItems
                  from note in item.Notes
                  where note.SomeProp == SomeValue
                  select new {item, note}).AsEnumerable();
    

    这将为每个 WorkItemNote 匹配,并保存相应的 工作项 也是。

    EF身份解析确保 工作项 (通过引用)如果有多个 工作笔记 符合标准。

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

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

    如果你现在这样做:

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

    你会看到的 工作笔记 与原始筛选器匹配的已添加到每个 workItem .

    这是因为所谓的关系修正。

    也就是说,这给了你想要的条件包括。

    希望这有帮助

    Alex