Maison >développement back-end >C++ >Comment puis-je utiliser la méthode distincte () de Linq sur des propriétés d'objets spécifiques?

Comment puis-je utiliser la méthode distincte () de Linq sur des propriétés d'objets spécifiques?

Barbara Streisand
Barbara Streisandoriginal
2025-02-02 09:16:08345parcourir

How Can I Use LINQ's Distinct() Method on Specific Object Properties?

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:

<code class="language-csharp">List<Person> distinctPeople = allPeople
    .GroupBy(p => p.Id)
    .Select(g => g.First())
    .ToList();</code>

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:

<code class="language-csharp">List<Person> distinctPeople = allPeople
    .GroupBy(p => new { p.Id, p.FavoriteColor })
    .Select(g => g.First())
    .ToList();</code>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn