none
Collection mit LINQ prüfen, ob ein Eintrag mehrfach existiert RRS feed

  • 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

    Mittwoch, 24. Juli 2013 13:08

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
    Mittwoch, 24. Juli 2013 19:16
    Beantworter

Alle Antworten

  • Hi Alexander,

    so richtig hab ich jetzt nicht verstanden was du suchst.

    Schau dir mal den Link  und diesen an, in beiden geht es darum doppelte Einträge in eine Liste zu bestimmen.

    MFG

    Björn

    Mittwoch, 24. Juli 2013 13:46
  • 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

    Mittwoch, 24. Juli 2013 16:24
  • 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
    Mittwoch, 24. Juli 2013 19:16
    Beantworter