使用以下DataTable:
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'时出现错误。关于如何使这项工作的任何想法?
答案 0 :(得分:5)
试试这个
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 :(得分:1)
试试
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") }
答案 2 :(得分:0)
我不确定使用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