L'obtention de valeurs uniques à partir d'une liste d'objets avec une List<string> en tant que propriété
À des fins d'illustration, j'ai un simple Employé de classe avec plusieurs champs et une méthode pour supprimer plusieurs événements à la Certifications
propriété
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
private List<string> certifications = new List<string>();
public List<string> Certifications
{
get { return certifications; }
set { certifications = value; }
}
public List<string> RemoveDuplicates(List<string> s)
{
List<string> dupesRemoved = s.Distinct().ToList();
foreach(string str in dupesRemoved)
Console.WriteLine(str);
return dupesRemoved;
}
La RemoveDuplicates méthode de travail supprimez tous les doublons de chaînes de caractères dans les Attestations de propriété de l'objet Employé. Considérons maintenant si j'ai une liste d'objets Employee.
Employee e = new Employee();
List<string> stringList = new List<string>();
stringList.Add("first");
stringList.Add("second");
stringList.Add("third");
stringList.Add("first");
e.Certifications = stringList;
//e.Certifications = e.RemoveDuplicates(e.Certifications); works fine
Employee e2 = new Employee();
e2.Certifications.Add("fourth");
e2.Certifications.Add("fifth");
e2.Certifications.Add("fifth");
e2.Certifications.Add("sixth");
List<Employee> empList = new List<Employee>();
empList.Add(e);
empList.Add(e2);
Je pourrais utiliser
foreach (Employee emp in empList)
{
emp.Certifications = emp.RemoveDuplicates(emp.Certifications);
}
pour obtenir une liste de TOUS unique de Certifications, de tous les employés dans la Liste, mais je voudrais le faire dans LINQ, quelque chose qui s'apparente à
stringList = empList.Select(emp => emp.Certifications.Distinct().ToList());
cela me donne un message d'erreur indiquant
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<System.Collections.Generic.List<string>>' to 'System.Collections.Generic.List<string>'. An explicit conversion exists (are you missing a cast?)
Comment puis-je obtenir une liste des Certifications à partir d'une liste d'objets Employee?
- Si l'Employé est un identifiant unique, alors je vous recommande de remplacer GetHashCode et est Égale à l'aide d'Employé. Également faire une Liste<string> certifications un HashSet (pas de Liste) de ne pas autoriser les doublons de l'Employé.
- C'est uniquement à des fins illustratives, mais je vous remercie pour ce, je file de suite celui-ci dans l'ensemble de l'outil.
Vous devez vous connecter pour publier un commentaire.
Si je comprends bien, vous souhaitez une liste de tous unique de certifications auprès de l'ensemble des employés. Ce serait un travail pour SelectMany:
Vous souhaitez utiliser SelectMany, qui vous permet de sélectionner des sous-listes, mais renvoie à une forme aplatie:
Vous pouvez essayer d'utiliser le SelectMany extension?