2012-09-05 26 views

Respuesta

23

Una función incluida está destinada a conservar las estructuras y gráficos de objeto originales. Se necesita una unión para proyectar una representación aplanada del gráfico de objetos 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 la ciudad de una instalación de envío).

Compare los siguientes: db.Customers.Include("Orders") genera un gráfico de objetos como esto:

Customer 
    Order 
    Order 
    Order 

Por el contrario, si lo hace lo mismo con una unión que se proyecta en un tipo anónimo que usted podría conseguir 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.

+1

pero es el resultado el mismo y es cuando es aconsejable utilizar el .Include vs a join –

+1

No, la unión produce un tipo anónimo (TResult) a través de SelectMany . el Include produce TSource con TCollection cargados ansiosamente en lugar de cargados de pereza. –

9

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 se puede construir un incluirse a sí mismo mediante el uso de una combinación, de esta manera:

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

Ésta es una "incluir" de la ciudad del usuario. Se manifiesta como una unión SQL.

+0

Hola, ¿pueden ver http://stackoverflow.com/q/18809817/859154? se trata de algo que dijiste aquí en tu respuesta. –