none
Linq Ausdruck (Wert mehrfach vorhanden) gesucht RRS feed

  • Frage

  • Hallo


    ich suche gerade nach einem Linq Ausdruck, kann jedoch nicht finden wie das geht.
    Ich habe eine Liste mit Objekten, darin möchte ich prüfen, ob mehr mals das gleiche enthalten ist.

    z.B.
    id       Text
    1        März
    2        Januar
    3        Juni
    4        Januar
    5        Juli

    In dem Fall ist Januar mehr als ein mal vorhanden.

    Ein TRUE oder die Anzahl würde ich gerne erfahren.

    Hat mir jemand eine Idee?

    Gruss Peter

    Donnerstag, 6. Oktober 2011 14:07

Antworten

  • Ein Möglichkeit mit LINQ besteht darin, die Daten anhand der "Text"-Eigenschaft zu gruppieren und dann halt nur die Gruppen zu selektieren, die mehr als ein Element enthalten:

    Module Module1
    
        Sub Main()
            Dim data As New List(Of Item) From {
                New Item() With {.Id = 1, .Text = "März"},
                New Item() With {.Id = 2, .Text = "Januar"},
                New Item() With {.Id = 3, .Text = "Juni"},
                New Item() With {.Id = 4, .Text = "Januar"},
                New Item() With {.Id = 5, .Text = "Juli"}
            }
    
            Dim groups = From item In data
                         Group By item.Text Into Group
                         Where Group.Count() > 1
    
            For Each g In groups
                Console.WriteLine("Found {0} {1} times.", g.Text, g.Group.Count())
            Next
        End Sub
    
    End Module
    
    Public Class Item
        Public Property Id As Integer
        Public Property Text As String
    End Class
    


     


    MVP Data Platform Development My blog
    • Als Antwort markiert peter haus Donnerstag, 6. Oktober 2011 17:40
    Donnerstag, 6. Oktober 2011 17:08

Alle Antworten

  • Ein Möglichkeit mit LINQ besteht darin, die Daten anhand der "Text"-Eigenschaft zu gruppieren und dann halt nur die Gruppen zu selektieren, die mehr als ein Element enthalten:

    Module Module1
    
        Sub Main()
            Dim data As New List(Of Item) From {
                New Item() With {.Id = 1, .Text = "März"},
                New Item() With {.Id = 2, .Text = "Januar"},
                New Item() With {.Id = 3, .Text = "Juni"},
                New Item() With {.Id = 4, .Text = "Januar"},
                New Item() With {.Id = 5, .Text = "Juli"}
            }
    
            Dim groups = From item In data
                         Group By item.Text Into Group
                         Where Group.Count() > 1
    
            For Each g In groups
                Console.WriteLine("Found {0} {1} times.", g.Text, g.Group.Count())
            Next
        End Sub
    
    End Module
    
    Public Class Item
        Public Property Id As Integer
        Public Property Text As String
    End Class
    


     


    MVP Data Platform Development My blog
    • Als Antwort markiert peter haus Donnerstag, 6. Oktober 2011 17:40
    Donnerstag, 6. Oktober 2011 17:08
  • Hallo Martin,

    vielen Dank.
    Jetzt wo ich es sehe, ist eigentlich klar.

    Danke auch, das du mir auch noch ein Beispiel geschrieben hast!

    Gruss Peter

     

    • Bearbeitet peter haus Donnerstag, 6. Oktober 2011 17:42
    Donnerstag, 6. Oktober 2011 17:40