vb.net 使用模糊搜索查找重复项的 Linq 语句
vb.net Linq statement to find duplicates using fuzzy searching
我有一个数据table包含:
- ID 为整数 = 主键。
- 名称为字符串
- 其他领域....
我有一个功能可以在 table
中找到重复的名字
Private Function DuplicateComputerNames() As String
Dim ret As String = $"Duplicate Computer Names found in Table Computer.{vbCrLf}"
Dim computerTable As DataTable
computerTable = ComputerTableAdapter.GetData
Dim duplicates = computerTable.AsEnumerable().GroupBy(Function(i) i.Field(Of String)("Name")) _
.Where(Function(g) g.Count() > 1).Select(Function(g) g.Key)
For Each d In duplicates
ret = $"{ret}{vbTab}{d}{vbCrLf}"
Next
Return ret
End Function
这非常有效。
现在有时名称会带有“(POOL)”前缀,即“Laptop-55 (POOL)”
我需要一个函数来查找 Laptop-55 部件的重复项。
即如果有 Laptop-55 和 Laptop-55 (POOL)
我认为这段代码可以完成这项工作,但显然不行。
Private Function PoolComputerNames() As String
Dim ret As String = $"Possible Duplicate Computer Names found in Table Computer.{vbCrLf}"
Dim computerTable As DataTable
computerTable = ComputerTableAdapter.GetData
Dim duplicates = computerTable.AsEnumerable().GroupBy(Function(i) i.Field(Of String)("Name")) _
.Where(Function(g) g.Count() > 1).Select(Function(g) g.Key.Split("("c)(0).Trim())
For Each d In duplicates
ret = $"{ret}{vbTab}{d}{vbCrLf}"
Next
Return ret
End Function
希望有人能指出正确的方向。
谢谢
感谢 jmcilhinney 的评论,我设法解决了我的问题。
Private Function PoolComputerNames() As String
Dim count As Integer = 0
Dim ret As String = $"[count] possible duplicate Computer Names found in Table Computer.{vbCrLf}"
Dim computerTable As DataTable
computerTable = ComputerTableAdapter.GetData
Dim duplicates = computerTable.AsEnumerable().GroupBy(Function(i) i.Field(Of String)("Name").Split("("c)(0).Trim()) _
.Where(Function(g) g.Count() > 1).Select(Function(g) g.Key)
For Each d In duplicates
count += 1
ret = $"{ret}{vbTab}{d}{vbCrLf}"
Next
ret = ret.Replace("[count]", $"{count}")
Return ret
End Function
我有一个数据table包含:
- ID 为整数 = 主键。
- 名称为字符串
- 其他领域....
我有一个功能可以在 table
中找到重复的名字Private Function DuplicateComputerNames() As String
Dim ret As String = $"Duplicate Computer Names found in Table Computer.{vbCrLf}"
Dim computerTable As DataTable
computerTable = ComputerTableAdapter.GetData
Dim duplicates = computerTable.AsEnumerable().GroupBy(Function(i) i.Field(Of String)("Name")) _
.Where(Function(g) g.Count() > 1).Select(Function(g) g.Key)
For Each d In duplicates
ret = $"{ret}{vbTab}{d}{vbCrLf}"
Next
Return ret
End Function
这非常有效。
现在有时名称会带有“(POOL)”前缀,即“Laptop-55 (POOL)” 我需要一个函数来查找 Laptop-55 部件的重复项。 即如果有 Laptop-55 和 Laptop-55 (POOL)
我认为这段代码可以完成这项工作,但显然不行。
Private Function PoolComputerNames() As String
Dim ret As String = $"Possible Duplicate Computer Names found in Table Computer.{vbCrLf}"
Dim computerTable As DataTable
computerTable = ComputerTableAdapter.GetData
Dim duplicates = computerTable.AsEnumerable().GroupBy(Function(i) i.Field(Of String)("Name")) _
.Where(Function(g) g.Count() > 1).Select(Function(g) g.Key.Split("("c)(0).Trim())
For Each d In duplicates
ret = $"{ret}{vbTab}{d}{vbCrLf}"
Next
Return ret
End Function
希望有人能指出正确的方向。 谢谢
感谢 jmcilhinney 的评论,我设法解决了我的问题。
Private Function PoolComputerNames() As String
Dim count As Integer = 0
Dim ret As String = $"[count] possible duplicate Computer Names found in Table Computer.{vbCrLf}"
Dim computerTable As DataTable
computerTable = ComputerTableAdapter.GetData
Dim duplicates = computerTable.AsEnumerable().GroupBy(Function(i) i.Field(Of String)("Name").Split("("c)(0).Trim()) _
.Where(Function(g) g.Count() > 1).Select(Function(g) g.Key)
For Each d In duplicates
count += 1
ret = $"{ret}{vbTab}{d}{vbCrLf}"
Next
ret = ret.Replace("[count]", $"{count}")
Return ret
End Function