Maison >développement back-end >C++ >Comment utiliser la méthode distincte () de Linq sur des propriétés spécifiques des objets complexes?
Extraction d'enregistrements uniques basés sur des propriétés spécifiques utilisant LINQ
La méthode Distinct()
de Linq supprime efficacement les éléments en double d'une collection. Cependant, lorsque vous traitez avec des objets complexes (par exemple, A List<T>
), l'utilisation directement de Distinct()
sur l'objet entier peut ne pas donner le résultat souhaité si vous n'avez besoin que d'unicité basée sur certaines propriétés. Cet article montre comment y parvenir en utilisant GroupBy
et Select
.
Tiration de groupes pour l'unicité basée sur la propriété
La clé pour obtenir des enregistrements distincts basés sur des propriétés spécifiques est d'utiliser la méthode GroupBy
de Linq. Ces groupes éléments partageant la même propriété (ou combinaison de propriétés), puis vous permet de sélectionner un représentant de chaque groupe.
illustrons avec un List<Person>
, où chaque objet Person
a des propriétés comme Id
et Name
:
<code>Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2"</code>
Pour récupérer des objets Person
distincts basés uniquement sur la propriété Id
, utilisez la requête LINQ suivante:
<code class="language-csharp">List<Person> distinctPeople = allPeople .GroupBy(p => p.Id) .Select(g => g.First()) .ToList();</code>
Ici, GroupBy(p => p.Id)
regroupe les objets Person
par leurs valeurs Id
. Select(g => g.First())
Sélectionne ensuite le premier élément de chaque groupe, vous donnant efficacement un objet Person
par Unique Id
.
s'étendant à plusieurs propriétés
Cette technique s'étend facilement à plusieurs propriétés. Se regrouper par Id
et FavoriteColor
:
<code class="language-csharp">List<Person> distinctPeople = allPeople .GroupBy(p => new { p.Id, p.FavoriteColor }) .Select(g => g.First()) .ToList();</code>
Ces groupes Person
objets basés sur la combinaison de Id
et FavoriteColor
, garantissant l'unicité dans les deux propriétés. Encore une fois, Select(g => g.First())
choisit un seul représentant de chaque groupe.
Considérations importantes
Cette approche suppose que votre fournisseur de requête peut gérer des groupes potentiellement vides. Si cela n'est pas garanti, envisagez d'utiliser FirstOrDefault()
au lieu de First()
pour gérer gracieusement de tels cas.
Pour les anciennes versions de l'entité Framework Core (avant la version 6), des méthodes alternatives peuvent être nécessaires. Reportez-vous à cette réponse de débordement de pile pour les conseils: https://www.php.cn/link/7dd21654ce1c39ec7632d219e8e71f11
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!