IMPORTANT: CECI EST PAS UN LINQ-TO-SQL QUESTION. C'est LINQ aux objets.Pouvez-vous créer un simple 'EqualityComparer <T>' en utilisant une expression lambda
courte question:
est-il un moyen simple LINQ à des objets pour obtenir une liste distincte des objets à partir d'une liste basée sur une propriété clé sur les objets.
longue question:
Je suis en train de faire une opération Distinct()
sur une liste des objets qui ont une clé comme une de leurs propriétés.
class GalleryImage {
public int Key { get;set; }
public string Caption { get;set; }
public string Filename { get; set; }
public string[] Tags {g et; set; }
}
J'ai une liste des objets qui contiennent Gallery
GalleryImage[]
. En raison de la façon dont fonctionne le service web, j'ai des doublons de l'objet GalleryImage
. Je pensais qu'il serait simple d'utiliser Distinct()
pour obtenir une liste distincte.
Ceci est la requête LINQ Je veux utiliser:
var allImages = Galleries.SelectMany(x => x.Images);
var distinctImages = allImages.Distinct<GalleryImage>(new
EqualityComparer<GalleryImage>((a, b) => a.id == b.id));
Le problème est que EqualityComparer
est une classe abstraite.
Je ne veux:
- mettre en œuvre IEquatable sur
GalleryImage
car il est généré - doivent écrire une catégorie distincte pour mettre en œuvre
IEqualityComparer
comme shown here
Y at-il une mise en œuvre concrète de EqualityComparer
quelque part que je manque?
J'aurais pensé qu'il y aurait un moyen facile d'obtenir des objets «distincts» d'un ensemble basé sur une clé.
Excellente info! Merci! –
Quel est le but de la seconde méthode statique Create avec le paramètre 'TSource ignored'? ProjectionEqualityComparer public static Créer (TSource ignoré, Func projection ) {return new ProjectionEqualityComparer (projection); } –
flesh
@flesh: Cela permet à l'inférence de type de se déclencher lorsque vous ne pouvez pas spécifier explicitement le type - par ex. pour les types anonymes. –