【问题标题】:Way to make EF include method generate inner joins?使EF包含方法生成内部连接的方法?
【发布时间】:2025-12-19 16:15:07
【问题描述】:

使用 EF4。我有一种情况,由于多对多表,带有显式连接的 linq to EF 查询将不起作用。我不会破坏数据库设计以适应 EF,所以我想使用 include 方法。但是,这似乎总是会生成左外连接,我需要内连接(简单的context.Table1s.Include("Table2") 表是一对一或一对多的会证明这个问题)。

任何强制内部连接的方法?

【问题讨论】:

  • 我们在这里讨论的是哪个版本的 EF?

标签: entity-framework entity-framework-4


【解决方案1】:

不幸的是,没有办法让 EF 以某种方式生成查询。

但是,当您添加 3 个实体时,您应该只能在设计器中看到其中的 2 个,第 3 个是“关系”。因此,如果您有实体 people、books 和 loan,您应该只看到 people 和 books,并且 people 应该具有名为 Books() 的导航属性,它将所有与该人相关的图书(贷款)返回。

如果您希望也可以在该导航属性上执行 .Include("Books")。

【讨论】:

    【解决方案2】:

    你可以通过编写更好的 LINQ 来控制它

    我问了一个非常 similar question,它给了我一个有用的答案,它提供了一个解决方案,因此我能够将查询转换为内部连接,从而大大加快查询执行时间。特别是接受答案中的第二个解决方案是我后来使用的那个,因为我真的不想使用 eSQL,因为我不太喜欢魔术字符串。它会让我回到 10 年前。

    【讨论】:

    • 当然,如果您以不同的方式编写查询,但是没有可以将其设置为 true 的名为 .UseInnerJoinsOnly 的属性:P
    • @F*:我想高效地编写 LINQ 与高效地编写其他代码是一样的。因此,为了编写好的 LINQ,您必须更深入地学习它。 HTML、CSS、C#、T-SQL 等也是如此。如果您了解该技术,您可以编写更好的代码。 LINQ 不仅仅是一个一站式工具店,他们在那里销售千篇一律的锤子和螺丝刀。这是一个常规的工具店,出售用于不同目的的不同工具。而且您必须知道自己在做什么才能为自己购买最合适的工具。
    • 其他问题的答案使用 linq to EF,我在我的情况下无法使用。我也不想(如你所说)使用 eSQL。
    最近更新 更多