LINQ: Quelle est la différence entre == et égale dans une jointure?
Question
Je me demandais toujours pourquoi il y a un mot-clé dans equals
LINQ rejoint plutôt que d'utiliser l'opérateur ==.
Property deadline =
(from p in properties
join w in widgets
on p.WidgetID equals w.ID
select p).First();
Au lieu de
Property deadline =
(from p in properties
join w in widgets
on p.WidgetID == w.ID
select p).First();
[EDIT] Reformulé la question et a révisé les exemples.
La solution
Il y a une bonne explication par Matt Warren Moth :
"La raison pour laquelle C # a le mot « égaux » au lieu de l'opérateur « == » était de préciser que la « sur » l'article a besoin de vous fournir deux expressions distinctes qui sont comparés pour l'égalité pas d'expression unique sous-jacente. le de jointure cartes de motif à la Enumerable.Join () opérateur de requête standard qui spécifie deux délégués distincts qui sont utilisés pour calculer les valeurs qui peuvent ensuite être comparées. Il en a besoin en tant que délégués séparés afin de construire une table de correspondance avec un seul et sonde dans la table de consultation avec l'autre. un processeur complet de requête comme SQL est libre d'examiner une seule expression sous-jacente et choisir la façon dont il va traiter. et pourtant, de faire LINQ fonctionner similaire à SQL, il faudrait que la condition de jointure soit toujours spécifié comme un arbre d'expression, une surcharge importante pour l'objet simple en mémoire le cas. "
Cependant, cela concerne join
. Je ne suis pas sûr equals
doit être utilisé dans votre exemple de code (-t-il même compiler?).
Autres conseils
Votre première version ne compile pas. Vous uniquement utiliser equals
dans des jointures, pour faire les moitiés séparées du équijointure clair au compilateur.