LINQ to DataTable, поиск повторяющихся строк - PullRequest
2 голосов
/ 05 июля 2011

Использование следующей таблицы данных:

    Dim d As New DataTable()
    d.Columns.Add("Product", GetType(System.String))
    d.Columns.Add("Value", GetType(System.Double))

    d.Rows.Add(New Object() {"OAP1", 100.0})
    d.Rows.Add(New Object() {"EPP4", 100})
    d.Rows.Add(New Object() {"OAP1", 150.25})
    d.Rows.Add(New Object() {"OAPIN", 200.0})

Я пытаюсь использовать LINQ, чтобы определить, существует ли более одного продукта любого типа. В SQL это будет работать примерно так:

SELECT Product FROM SOME_TABLE HAVING COUNT(*) > 1

Я не могу на всю жизнь понять, как это сделать в LINQ. Я следовал за кем-то, кто сделал что-то вроде этого:

    Dim q = From row In d.AsEnumerable()
            Group row By New { column1 = row("Product"), column2 = row("Value") }
            Into grp
            Where grp.Count() > 1
            Select row

    For Each item In q
        ' 'q' is not declared. It may be inaccessible due to its protection level.
    Next

Но я получаю ошибку, когда пытаюсь фактически использовать 'q'. Любые идеи о том, как я могу сделать эту работу?

Ответы [ 3 ]

6 голосов
/ 05 июля 2011

Попробуйте это

Dim duplicates = d.AsEnumerable().GroupBy(Function(i) i.Field(Of String)("Product")).Where(Function(g) g.Count() > 1).Select(Function(g) g.Key)

For Each dup In duplicates
Next
1 голос
/ 05 июля 2011

Просто попробуйте

Dim q = From row in d.AsEnumerable()
        Group row By row.Field(Of String)("Product")
        Into grp
        Where grp.Count() > 1
        Select { Country = row("Product"), Value = row("Value") }
0 голосов
/ 05 июля 2011

Я не уверен в синтаксисе запроса с VB.NET, попробуйте это

Dim q = d.AsEnumerable().Select(Function(r) New With { .Column1 = r("Product"), .Column2 = r("Value")}) _
                    .GroupBy(Function(r) New With {r.Column1, r.Column2}) _
                    .Where(Function(g) g.Count() >1 )

For Each item In q
    Console.WriteLine(item.Key)
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...