Vb.net LINQ过滤重复列值并替换重复列值
我有这张桌子:Vb.net LINQ过滤重复列值并替换重复列值,vb.net,Vb.net,我有这张桌子: Code ------ Version AAA ------ 0.0.0.0 AAA ------ 0.0.0.1 AAA ------ 0.0.0.1 AAA ------ 0.0.0.1 AAA ------ 0.0.0.1 BBB ------ 0.0.0.0 CCC ------ 0.0.0.0
Code ------ Version
AAA ------ 0.0.0.0
AAA ------ 0.0.0.1
AAA ------ 0.0.0.1
AAA ------ 0.0.0.1
AAA ------ 0.0.0.1
BBB ------ 0.0.0.0
CCC ------ 0.0.0.0
CCC ------ 0.0.0.0
这是我在表中的数据,我想将其转换为:
Code ------ Version
AAA ------ 0.0.0.0
AAA ------ 0.0.0.1
AAA ------ 0.0.0.2
AAA ------ 0.0.0.3
AAA ------ 0.0.0.4
BBB ------ 0.0.0.0
CCC ------ 0.0.0.0
CCC ------ 0.0.0.1
现在,我试着用外观来做一些测试,但是我认为它可以用LINQ来改进。这是我当前的代码:
For Each row As DataRow In duplicateEntityRecords.Rows
Dim strkey = row(0).ToString
foundrows = dataObject.Tables("tables").Select("version= '" & strkey & "'")
If foundrows.Length > 1 AndAlso Not strkey.Equals(String.Empty) Then
Dim increment As String = "1"
For i As Integer = 1 To
foundrows.GetUpperBound(0)
foundrows(i)("friendlyname") = foundrows(i)("friendlyname") + increment increment = increment + 1
Next
End If
Next
这是否可以使用LINQ执行相同的任务?您可以按匿名类型分组,然后使用
首先
仅为每个组获取一个:
Dim query = From row In table
Group row By row.Code, row.Version Into codeVersionGroup = Group
Select codeVersionGroup.First()
For Each x In query
Console.WriteLine("{0}---{1}",x.Code, x.Version)
Next
您能告诉我们您做了什么吗?对于重复EntityRecords.Rows Dim strkey=row(0)。ToString foundrows=dataObject.Tables(“表格”)。如果foundrows.Length>1且也不是strkey.Equals(String.Empty),请选择(“版本=”&strkey&“”),然后Dim increment As String=“1”对于foundrows.GetUpperBound(0)foundrows(i)(“friendlyname”)=foundrows(i)(“friendlyname”)+increment increment=increment+1 Next End If nextb但我对LINQ不太熟悉,所以我在循环,这是性能问题。因此需要使用LINQ@FedericoNavarreteThank获得答案,但我需要该表中的所有字段。我不想去first@Nani:它接受所有字段,每个组只返回一条记录,因此删除duplicates@TimSchmelter我认为OP不希望删除重复项,但希望用每个代码的唯一版本替换非唯一版本。@DavidWilson,但这是通过此查询完成的。每一组只能存活一行