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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top