zu illustrativen Zwecken ich eine einfache Klasse Employee mit mehreren Feldern und ein Verfahren habe mehrere Vorkommen in der Certifications
Eigenschaft entfernenErste eindeutige Werte aus einer Liste von Objekten mit einer Liste <string> als 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 wird funktionieren, doppelte Zeichenfolgen in der Certifications-Eigenschaft des Employee-Objekts zu entfernen. Überlegen Sie jetzt, ob ich eine Liste von Mitarbeiter-Objekten habe.
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);
konnte ich
foreach (Employee emp in empList)
{
emp.Certifications = emp.RemoveDuplicates(emp.Certifications);
}
verwenden, um eine Liste aller einzigartigen Zertifizierungen zu erhalten, von allen Mitarbeitern in der Liste, aber ich möchte dies in LINQ tun, so etwas wie
stringList = empList.Select(emp => emp.Certifications.Distinct().ToList());
Dies gibt mir einen Fehler,
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 eindeutiger Zertifizierungen aus einer Liste von Employee-Objekten abrufen?
Wenn EmployeeId ein eindeutiger Bezeichner ist, empfehle ich Ihnen, GetHashCode und Equals mit EmployeeId zu überschreiben. Machen Sie auch Liste Zertifizierungen ein HashSet (nicht Liste), um Duplikate in Mitarbeiter zu erlauben. –
Paparazzi
Dies dient nur zur Veranschaulichung, aber ich danke Ihnen für das Aufzeigen, dass ich dieses im Werkzeugsatz ablegen werde. – wootscootinboogie