LINQ Include vs Join.它们是等价的吗?

Nat*_*Pet 30 linq

我在linq中使用了join来加入2个表.join和Include之间有什么区别.从我看来,他们都表现得一样.

    Include vs. Join
Run Code Online (Sandbox Code Playgroud)

Jim*_*ley 33

"包含"旨在保留原始对象结构和图形.需要加入来投影对象图的展平表示,或者通过图表加入与自然无关的类型(即,将客户的城市加入运输设施的城市).

比较以下内容: db.Customers.Include("Orders") 生成如下对象图:

Customer
   Order
   Order
   Order
Run Code Online (Sandbox Code Playgroud)

相反,如果您使用投射到匿名类型的连接执行相同操作,则可以获得以下内容:

from c in db.Customers 
join o in db.Orders on c.CustomerId equals o.CustomerId 
select new {c, o}

// produces new Anonymous<Customer, Order> 
Run Code Online (Sandbox Code Playgroud)

虽然两者都可以向数据库发出相同的请求,但结果类型可能完全不同.

  • 有人可以添加linqtosql vs Include背后的实际T-sql查询吗?想在数据库中看到t-sql查询,谢谢! (4认同)
  • 我正在做实体框架几个月,有人可以使答案也更容易理解吗?谢谢, (2认同)

usr*_*usr 11

从某种意义上说,是的.Include实现为连接.根据所包含链接的可为空性,它是内部或左侧连接.

您可以使用连接自己构建包含,如下所示:

db.Users.Select(u => new { u, u.City })
Run Code Online (Sandbox Code Playgroud)

这是用户所在城市的"包含".它表现为SQL连接.


use*_*444 6

如果您只是需要全部用于Orders某些Customers。博客应用程序的一个很好的例子是始终显示以下所有Comments内容Articles。然后Include就是你的工作方式。

JoinCustomers如果您需要一些并使用实体中包含的某些数据过滤掉它们,则反对会更有帮助Orders。例如,您想整理出包含粗俗词语的内容Articles发送给警方。ArticlesComments

此外,如果您的Orders实体包含大量数据(许多列),占用大量内存,并且您不需要全部数据,那么join效率会更高,但这里始终存在一个问题:什么是“大量数据”或“许多列”意味着首先测试将是最好的选择。