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.