在强类型表上使用Linq获取重复项

时间:2017-07-24 20:55:51

标签: vb.net linq

我在基于名称,日期和类别的表格中查找重复项都是相同的。我想要结果集中的两个(或全部)重复行。我使用VS 2008和.net 3.5。我从强类型表中的数据开始,并希望最终只能在同一个表或表的副本中使用重复项。我使用数据表作为报告的来源。

我花了很多时间查看类似的问题,但没有找到答案。

Dim LList as PmtDataTable = PmtList.GroupBy(x => New {x.Name, x.PmtDate, x.Category}) _
                   .Where(x => x.Count() > 1) _
                   .select(x => New {x.key, Values = x.tolist()})

我从https://stackoverflow.com/a/15747265/2559297获得了语法,但由于我使用旧的VS它不适合我。你能用.net 3.5将其翻译成VS 2008吗?

2 个答案:

答案 0 :(得分:1)

您错过了关键字

你错过了C#VB.NET :)(我是C#开发人员)。

试试这个:

Dim query = PmtList.GroupBy(Function(x) New With {Key .Name = x.Name, Key .PmtDate = x.PmtDate, Key .Category = x.Category}) _ .Where(Function(x) x.Count() > 1) _ .Select(Function(x) New With {.KeyName = x.key, .Count= x.Count()})

答案 1 :(得分:0)

@Tim.Tang的答案很接近。但我需要它反馈给PmtDataTable。因此改变了他的Select语句以返回组。然后我获取行并将数据添加到新数据表。

Dim dupList = PmtList.GroupBy(Function(x) New With {Key .Name = x.Name, _
                                                    Key .PmtDate = x.PmtDate, _ 
                                                    Key .Category = x.Category}) _
                     .Where(Function(y) y.Count() > 1) _
                     .SelectMany(Function(grp) grp)

Dim PmtList2 As New PmtDataTable
For Each rw as PmtRow In dupList
    Dim iRow As PmtRow
    iRow = PmtList2.NewPmtRow
    iRow.ItemArray = rw.ItemArray
    PmtList2.AddPmtRow(iRow)
Next