2009-12-20 5 views
2

Cette question fait suite à link text d'où le revisité dans le titre. Je soulève ceci comme une nouvelle question car la réponse acceptée et le commentaire fait sous la question originale suggèrent tous les deux que le mot-clé égal utilisé dans la requête de jointure se rapporte seulement aux types de valeur dans la comparaison. Je crois que cela est trompeur comme suit. En coulisses, le comparateur d'égalité par défaut est utilisé pour comparer les clés à l'aide d'une recherche par clé. La jointure est implémentée dans Enumerable.Join et la clé peut être une valeur ou une référence.Mot-clé 'equals' Linq Revisited - Compare-t-il les valeurs et les références aux objets?

Inclus dans l'autre réponse était un exemple utilisant POCOs. Je ne peux que supposer que comme les jointures sont utilisées dans Linq à Sql sur les clés primaires, comme il s'agit souvent de types de valeur simples, c'est là que la confusion est apparue.

Est-ce que les égaux comparent les valeurs et les références aux objets?

Est-ce que j'ai mal compris?

Répondre

2

Comme vous semblez l'indiquer dans votre question, le mot-clé equals utilise EqualityComparer<T>.Default. Par conséquent, il comparera de la même manière que EqualityComparer<T>.Default.

Si vous voulez comparer la valeur, vous pouvez mettre en œuvre IEquatable<T>

+0

Merci qui confirme ma pensée, je ne pouvais pas comprendre pourquoi les gens s'accrochaient sur la seule comparaison de la valeur. Je vais laisser cela ouvert pendant un petit moment pour voir s'il y a d'autres réponses mais +1 pour l'instant merci. – Andrew

Questions connexes