Immer eindeutige Werte aus einer Liste von Objekten mit einer Liste<string> als Eigenschaft

Zur Veranschaulichung habe ich eine einfache Mitarbeiter-Klasse mit mehreren Feldern und eine Methode zum entfernen mehrerer Vorkommnisse in der Certifications Eigenschaft

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;
        }

Die RemoveDuplicates-Methode arbeiten, entfernen Sie alle doppelten Saiten in den Zertifizierungen Eigenschaft des Employee-Objekt. Überlegen Sie jetzt, wenn ich eine Liste von Employee-Objekten.

 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);

Könnte ich

foreach (Employee emp in empList)
           {
               emp.Certifications = emp.RemoveDuplicates(emp.Certifications);
           }

erhalten Sie eine Liste ALLER eindeutigen Zertifizierungen, die für alle Mitarbeiter in der Liste, aber ich möchte diese in LINQ, so etwas wie

stringList = empList.Select(emp => emp.Certifications.Distinct().ToList());

dieser gibt mir die Fehlermeldung

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?)  

Wie kann ich eine Liste von einzigartigen Zertifizierungen aus einer Liste von Employee-Objekten?

Wenn EmployeeId ist ein einmalige Kennung dann empfehle ich dir die GetHashCode überschreiben, und Gleich mit der Personal-Nr. Auch List<string> Zertifizierungen ein HashSet (keine Liste), nicht zulassen, dass Duplikate der Mitarbeiter.
Dies ist nur zur Veranschaulichung, aber danke für den Hinweis, ich werde die Datei diesen einen Weg in das tool-set.

InformationsquelleAutor wootscootinboogie | 2013-06-18

Schreibe einen Kommentar