A scopo illustrativo Ho una semplice classe Employee con diversi campi e un metodo per rimuovere più occorrenze nel Certifications
proprietàOttenere valori unici da un elenco di oggetti con una lista <string> come una proprietà
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;
}
Il metodo RemoveDuplicates funzionerà rimuovendo eventuali stringhe duplicate nella proprietà Certifications dell'oggetto Employee. Considerare ora se ho una lista di oggetti 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);
ho potuto utilizzare
foreach (Employee emp in empList)
{
emp.Certifications = emp.RemoveDuplicates(emp.Certifications);
}
per ottenere un elenco di tutte le certificazioni uniche, da tutti i dipendenti nella lista, ma mi piacerebbe farlo in LINQ, qualcosa di simile a
stringList = empList.Select(emp => emp.Certifications.Distinct().ToList());
mi dà un errore dicendo
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?)
Come posso ottenere un elenco di certificazioni univoche da un elenco di oggetti Impiegato?
Se EmployeeId è un identificativo univoco, si consiglia di eseguire l'override di GetHashCode e Equals utilizzando EmployeeId. Rendi anche le certificazioni List un HashSet (non List) per non consentire duplicati in Employee. –
Paparazzi
Questo è solo a scopo illustrativo, ma grazie per averlo indicato, lo archivierò nel set di strumenti. – wootscootinboogie