Benutzer mit den meisten Antworten
Collection mit LINQ prüfen, ob ein Eintrag mehrfach existiert

Frage
-
Hallo,
in einer Collection will ich mit LINQ prüfen, ob ein Eintrag (nur Name) mehrfach existiert.
List<User> users = new List<User>();
var user = new User() { Name = "Andreas Mueller", Gruppe = "A1" };
users.Add(user);
users.Add(user);user = new User() { Name = "Thomas Mueller", Gruppe = "A1" };
users.Add(user);IEnumerable<User> members = users;
// 1. Variante mit bool; existiert ein Mehrfacheintrag
bool anyMembers = members.Any(item => item.Name.Contains()...// 2. Variante mit Ausgabe der mehrfachen Einträge. Wenn User dreimal in der Liste users existiert, dann nur einmal in die neue Liste results.
List<User> results = new List<User>();
results = members.Any(item => item.Name.Contains()...Wie lauten die vollständigen LINQ-Ausdrucke?
Alexander
Antworten
-
Hallo Alexander,
für einen Test via Any:
// Irgendein doppelter Name var query1 = from u in users group u by u.Name into g where g.Count() > 1 select g; Console.WriteLine("Ein Doppel? {0}", query1.Any());
Und um daraus eine Liste zu machen:
// Erstes Duplikat nach Name var query2 = from u in users group u by u.Name into g where g.Count() > 1 select g.Min(); var dupUsers = query2.ToList(); foreach (var u in dupUsers) Console.WriteLine("{0} / {1}", u.Name, u.Gruppe);
Gruß Elmar- Als Antwort markiert AlexanderRi Donnerstag, 25. Juli 2013 08:57
Alle Antworten
-
Hallo Björn,
wie oben beschrieben suche ich zwei LINQ-Ausdrücke.Der erste LINQ-Ausdruck soll einfach einen boolschen Wert zurückgeben, ob mindestens zwei User mit gleichen Namen existiert. Also kommt eine Name mehrmals vor.
Der zweite LINQ-Ausdruck soll die User, welche den gleichen Namen haben, in eine neue Liste ausgeben. Wenn drei User den gleichen Namen haben, dann soll der User aber nur einmal in der neuen Liste existieren.
Alexander
-
Hallo Alexander,
für einen Test via Any:
// Irgendein doppelter Name var query1 = from u in users group u by u.Name into g where g.Count() > 1 select g; Console.WriteLine("Ein Doppel? {0}", query1.Any());
Und um daraus eine Liste zu machen:
// Erstes Duplikat nach Name var query2 = from u in users group u by u.Name into g where g.Count() > 1 select g.Min(); var dupUsers = query2.ToList(); foreach (var u in dupUsers) Console.WriteLine("{0} / {1}", u.Name, u.Gruppe);
Gruß Elmar- Als Antwort markiert AlexanderRi Donnerstag, 25. Juli 2013 08:57