Pourquoi ne pas simplement utiliser l'opérateur == dans les jointures si t peut l'utiliser dans une clause 'where'?Pourquoi l'opérateur 'equals' dans LINQ se joint-il?
Répondre
Les deux côtés de l'égalité dans une jointure sont traités comme deux expressions lambda distinctes qui génèrent les clés pour les deux séquences. L'utilisation du mot-clé equals rend ambigu le point où un lambda se termine et l'autre commence. Pour une clause where, d'autre part, il y a une seule expression lambda qui décide si chaque élément correspond:
from prod in products
where prod.CategoryID == 1
products.Where(prod => prod.CategoryID == 1)
En théorie, rejoint aurait pu être mis en œuvre avec un lambda comme
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 });
Cependant , en calculant deux clés et en effectuant la comparaison elle-même, LINQ peut utiliser des tables de hachage pour calculer la jointure plus efficacement que s'il devait exécuter une comparaison arbitraire pour chaque paire d'éléments.
Vous devrez demander aux concepteurs mais il est clair que permettre n'importe quelle expression (booléenne) permettrait beaucoup trop de possibilités. En utilisant un mot-clé spécial comme equals
, il est beaucoup plus facile de le contraindre à la spécification que 2 colonnes appropriées. J'ai trouvé une discussion à propos de The Moth.
- 1. Pourquoi AbstractCollection n'implémente pas equals()?
- 2. Pourquoi ma méthode equals ne fonctionne pas?
- 3. Equals (Obj) Test
- 4. Equals signe dans l'activation django-inscription url
- 5. Qui se joint à LINQ?
- 6. se joindre à deux ensembles dans LINQ
- 7. NHibernate Equals et GetHashCode
- 8. ^= opérateur dans vb.net (Xor Equals)?
- 9. Linq: les objets liés sont null, pourquoi?
- 10. C# Assert.AreNotEqual versus Equals
- 11. Java overriding equals, array
- 12. Pourquoi ScriptReference ne remplace-t-il pas Equals?
- 13. Pourquoi list.get (0) .equals (null) ne fonctionne-t-il pas?
- 14. moissonneuse-batteuse se joignent à String.Contains dans LINQ requête
- 15. Substitution Java Méthode equals()
- 16. Equals et GetHashCode
- 17. Hide Equals et ReferenceEquals
- 18. croisée se Linq à
- 19. Surcharger la méthode Equals dans Structs
- 20. Pourquoi le fragment d'un Uri est-il ignoré dans la méthode Equals?
- 21. compréhension Aide JQuery Attribute Equals Sélecteur
- 22. Mot-clé 'equals' Linq Revisited - Compare-t-il les valeurs et les références aux objets?
- 23. LINQ Requêtes ignorées. Pourquoi?
- 24. Cast pour objet avant contrôle nul dans Equals primordial
- 25. Générer equals/hashcode/toString en utilisant l'annotation
- 26. Equals, GetHashCode, EqualityComparers et égalité floue
- 27. gauche se joindre à LINQ
- 28. Linq gauche se joindre à l'état non trivial
- 29. Pourquoi et quand utiliser LINQ?
- 30. Comment se joindre à plusieurs conditions (OR) dans LINQ to SQL?
Cela a du sens. – ProfK