38 votes

Linq: Quelle est la différence entre == et égaux dans une jointure?

Je me suis toujours demandé pourquoi il y a un equals mot-clé dans 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.

42voto

Konrad Rudolph Points 231505

Il y a une belle explication par Matt Warren, à La Teigne:

"La raison en C# a le mot "égal" au lieu de ‘==' opérateur est de bien faire comprendre que le " on " de la clause du besoin de vous pour la fourniture de deux expressions distinctes, qui sont comparées pour l'égalité, pas une seule expression de prédicat. De rejoindre les motifs à l'Énumérable.Join() la norme d'opérateur de requête qui spécifie deux délégués qui sont utilisées pour calculer des valeurs qui peuvent ensuite être comparées. Il a besoin d'eux comme distinct des délégués dans le but de construire une table de correspondance avec l'un et d'une sonde dans la table de recherche avec les autres. Une requête complète de traitement de texte tel SQL est libre d'examiner un seul prédicat d'expression et de choisir la façon dont il va traiter. Pourtant, pour faire LINQ de fonctionnement similaire à SQL exigerait que la condition de jointure toujours être spécifié comme une expression de l'arbre, une surcharge importante pour la simple objet en mémoire de cas."

Cependant, il s'agit d' join. Je ne suis pas sûr d' equals doit être utilisé dans votre exemple de code (c'est aussi le compiler?).

17voto

Jon Skeet Points 692016

Votre première version n'est pas compilé. Vous seulement utiliser equals dans les jointures, de faire les deux moitiés séparées de l'équi-jointure clair pour le compilateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X