Utilisation de Linq's Distinct () pour les propriétés d'objets uniques
La méthode Linq Distinct()
supprime efficacement les éléments en double d'une séquence. Cependant, vous devez souvent identifier l'unicité basée sur des propriétés d'objets spécifiques, pas l'objet entier.
Exemple: Persons uniques basés sur ID
Disons que vous avez une classe Person
avec une propriété Id
. Pour obtenir une liste de personnes uniques en fonction de leurs identifiants, regrouper la liste par le Id
et sélectionnez la première personne dans chaque groupe:
List<Person> distinctPeople = allPeople .GroupBy(p => p.Id) .Select(g => g.First()) .ToList();
Gestion de plusieurs propriétés
Pour assurer l'unicité sur plusieurs propriétés (par exemple, Id
et FavoriteColor
), créez un type anonyme comme clé de regroupement:
List<Person> distinctPeople = allPeople .GroupBy(p => new { p.Id, p.FavoriteColor }) .Select(g => g.First()) .ToList();
Remarque importante: Compatibilité des fournisseurs de requête
Certains fournisseurs de requêtes (comme les anciennes versions de l'entité Framework Core) peuvent lancer des exceptions si un groupe est vide. Dans de tels cas, remplacez First()
par FirstOrDefault()
. Si FirstOrDefault()
renvoie null
, vous devrez gérer cette possibilité dans votre code.
EF Core (pré-version 6) Solution
Pour les versions de noyau EF avant 6 ans, une approche plus robuste est nécessaire pour gérer les groupes vides potentiels. Reportez-vous à cette réponse de débordement de pile pour une solution détaillée: https://www.php.cn/link/7dd21654ce1c39ec7632d219e8e71f11 Cela fournit une méthode qui gère gracieusement les cas où une combinaison de propriétés n'a pas d'objets correspondants.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!