Perché link non usa semplicemente l'operatore == in join se t può usarlo in una clausola 'where'?Perché l'operatore "uguale" in LINQ si unisce?
risposta
I due lati dell'uguaglianza in un join vengono considerati due espressioni lambda distinte che generano le chiavi per le due sequenze.
from category in categories
join prod in products on category.ID equals prod.CategoryID
categories.Join(products,
category => category.ID,
prod => prod.CategoryID,
(category, prod) => new { Category = category, Product=prod });
Utilizzando la parola uguale rende unabmiguous dove uno lambda finisce e le altre partenze. Per una clausola in cui, d'altra parte, c'è una sola espressione lambda che decide se ogni voce corrisponde:
from prod in products
where prod.CategoryID == 1
products.Where(prod => prod.CategoryID == 1)
In teoria, si unisce avrebbe potuto essere realizzato con un unico lambda come
from category in categories
join prod in products on category.ID == prod.CategoryID
categories.Join(products,
(category, prod) => category.ID == prod.CategoryID,
(category, prod) => new { Category = category, Product=prod });
Tuttavia Calcolando due chiavi e eseguendo il confronto stesso, LINQ può utilizzare le tabelle hash per calcolare l'unione in modo più efficiente rispetto a se dovesse eseguire un confronto arbitrario per ogni coppia di elementi.
Si dovrebbe chiedere ai progettisti, ma è chiaro che consentire qualsiasi espressione (booleana) consentirebbe troppe possibilità. L'utilizzo di una parola chiave speciale come equals
rende molto più semplice vincolarlo alle specifiche come 2 colonne appropriate.
Ho trovato una discussione su The Moth.
- 1. Perché Linq si unisce in modo diverso
- 2. Perché questa croce si unisce così lentamente a Linq?
- 3. LINQ to NHibernate duplicati unisce
- 4. NHibernate - Sinistra si unisce
- 5. Perché il comparatore si dichiara uguale?
- 6. Rails si unisce tramite l'associazione
- 7. git merge non si unisce
- 8. LEFT OUTER si unisce in Rails 3
- 9. mysql - subquery e si unisce
- 10. Perché ottengo conflitti quando si unisce un ramo al tronco e quindi lo si unisce al ramo?
- 11. Linq agli oggetti si unisce all'ordine predefinito specificato quando non viene utilizzato alcun ordine?
- 12. Oracle a MySQL sinistra si unisce
- 13. unisce in Javascript
- 14. Come scrivere operatore non uguale in linq a sql?
- 15. Unisce la direzione in Mercurial?
- 16. ottenendo un errore quando si utilizza si unisce nella query
- 17. Perché FLT_MIN è uguale a zero?
- 18. Perché! == "" non è uguale a! == null
- 19. Perché non 0.9 ricorrente sempre uguale 1
- 20. Linq è più veloce, più lento o uguale?
- 21. Perché Jump Couching si attiva quando utilizzo LINQ?
- 22. Perché questo cast di Linq fallisce quando si usa ToList?
- 23. TFS2010 - Track Unisce
- 24. LINQ è generalmente più lento di un'istruzione SQL uguale
- 25. Come fare multipla si unisce con NHibernate criteri API
- 26. MySQL si unisce e COUNT (*) da un'altra tabella
- 27. Perché c'è un operatore non uguale in python
- 28. Qualsiasi gui per git si unisce (w squash)?
- 29. LINQ to SQL unirsi genera SQL che unisce il IS NULL
- 30. Mysql multipla sinistra si unisce sulla stessa tavola
Questo ha senso. – ProfK