Fusionner deux listes d'objets à l'aide de LINQ
Dans des scénarios tels que la gestion des données, vous pouvez rencontrer des situations dans lesquelles vous devez combiner plusieurs listes d'objets. Considérons un cas spécifique où nous avons deux listes d'objets Person :
<br>class Person<br>{</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">string Name; int Value; int Change;
}
List< ;Personne> list1;
Liste
Notre objectif est de fusionner ces deux listes en une nouvelle Liste
Utilisation de la méthode Linq Union
Une approche simple pour fusionner ces listes consiste à utiliser la méthode d'extension Linq Union . Cette méthode combine les éléments de deux séquences et renvoie une nouvelle séquence. Par exemple :
<br>var mergedList = list1.Union(list2).ToList();<br>
Par défaut, la méthode Union utilise les méthodes Equals et GetHashCode de la classe Person pour déterminer les éléments en double. Cependant, si vous souhaitez comparer des personnes en fonction d'une propriété spécifique, telle que leur nom, vous pouvez remplacer ces méthodes dans la classe Person.
/// <summary> /// Checks if the provided object is equal to the current Person /// </summary> /// <param name="obj">Object to compare to the current Person</param> /// <returns>True if equal, false if not</returns> public override bool Equals(object obj) { // Try to cast the object to compare to to be a Person var person = obj as Person; return Equals(person); } /// <summary> /// Returns an identifier for this instance /// </summary> public override int GetHashCode() { return Name.GetHashCode(); } /// <summary> /// Checks if the provided Person is equal to the current Person /// </summary> /// <param name="personToCompareTo">Person to compare to the current person</param> /// <returns>True if equal, false if not</returns> public bool Equals(Person personToCompareTo) { // Check if person is being compared to a non person. In that case always return false. if (personToCompareTo == null) return false; // If the person to compare to does not have a Name assigned yet, we can't define if it's the same. Return false. if (string.IsNullOrEmpty(personToCompareTo.Name) return false; // Check if both person objects contain the same Name. In that case they're assumed equal. return Name.Equals(personToCompareTo.Name); }
Vous pouvez également créer une classe de comparaison qui implémente IEqualityComparer. interface pour définir vos propres critères de comparaison. Vous pouvez ensuite spécifier ce comparateur comme deuxième paramètre dans la méthode Union.
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!