我在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)
虽然两者都可以向数据库发出相同的请求,但结果类型可能完全不同.
usr*_*usr 11
从某种意义上说,是的.Include实现为连接.根据所包含链接的可为空性,它是内部或左侧连接.
您可以使用连接自己构建包含,如下所示:
db.Users.Select(u => new { u, u.City })
Run Code Online (Sandbox Code Playgroud)
这是用户所在城市的"包含".它表现为SQL连接.
如果您只是需要全部用于Orders某些Customers。博客应用程序的一个很好的例子是始终显示以下所有Comments内容Articles。然后Include就是你的工作方式。
JoinCustomers如果您需要一些并使用实体中包含的某些数据过滤掉它们,则反对会更有帮助Orders。例如,您想整理出包含粗俗词语的内容Articles发送给警方。ArticlesComments
此外,如果您的Orders实体包含大量数据(许多列),占用大量内存,并且您不需要全部数据,那么join效率会更高,但这里始终存在一个问题:什么是“大量数据”或“许多列”意味着首先测试将是最好的选择。