Ho usato join in linq per unire 2 tabelle. Qual è la differenza tra un join e Includi. Da quello che vedo, entrambi si comportano allo stesso modo.LINQ Include vs Join. Sono equivalenti?
Include vs. Join
Ho usato join in linq per unire 2 tabelle. Qual è la differenza tra un join e Includi. Da quello che vedo, entrambi si comportano allo stesso modo.LINQ Include vs Join. Sono equivalenti?
Include vs. Join
Un Incluso è destinato a conservare le strutture e i grafici dell'oggetto originale. Un join è necessario per proiettare una rappresentazione appiattita del grafico dell'oggetto o per unire tipi che non sono correlati in modo naturale attraverso il grafico (ad esempio, unire la città del cliente con la città di una struttura di spedizione).
Confrontare il seguente: db.Customers.Include("Orders")
Genera un oggetto grafico come questo:
Customer
Order
Order
Order
Al contrario, se si fa la stessa cosa con un join proietta in un tipo anonimo si potrebbe ottenere il seguente:
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>
Mentre entrambi possono inviare la stessa richiesta al database, il tipo risultante potrebbe essere molto diverso.
In un certo senso, sì. Includi è implementato come join. A seconda del nullability del link incluso è un join interno o sinistro.
È sempre possibile costruire un include corpo utilizzando una join, come questo:
db.Users.Select(u => new { u, u.City })
si tratta di un "include" per la città dell'utente. Si manifesta come un join SQL.
Ciao, puoi vedere http://stackoverflow.com/q/18809817/859154? riguarda qualcosa che hai detto qui nella tua risposta. –
ma è il risultato lo stesso ed è quando è consigliabile utilizzare. Includi contro un join –
No, il join produce un tipo anonimo (TResult) tramite SelectMany. l'Includi produce TSource con TCollection caricato avidamente anziché caricato pigro. –