world sport sailing org miami isaf cup championships linq

sport - LINQ Include vs Join. ¿Son equivalentes?



sailing world cup final 2018 (2)

He usado join en linq para unir 2 tablas. ¿Cuál es la diferencia entre una unión e Incluir? Por lo que veo, ambos se comportan igual.

Include vs. Join


En cierto sentido, sí. Incluir se implementa como una unión. Dependiendo de la nulabilidad del enlace incluido, es una unión interna o izquierda.

Siempre puedes crear una inclusión usando una combinación, como esta:

db.Users.Select(u => new { u, u.City })

Esta es una "inclusión" para la ciudad del usuario. Se manifiesta como una unión SQL.


Un Included está destinado a conservar las estructuras y gráficos del objeto original. Se necesita una unión para proyectar una representación aplanada del gráfico de objeto o para unir tipos que no están relacionados de forma natural a través del gráfico (es decir, unir la ciudad del cliente con una ciudad de instalaciones de envío).

Compare lo siguiente: db.Customers.Include("Orders") Genera un gráfico de objetos como este:

Customer Order Order Order

Por el contrario, si hace lo mismo con una unión que se proyecta en un tipo anónimo, podría obtener lo siguiente:

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>

Si bien ambos pueden emitir la misma solicitud a la base de datos, el tipo resultante puede ser bastante diferente.