首页 > 解决方案 > 从VB中的集合中获取唯一行

问题描述

目前,此代码获取“文件夹”列的唯一值并返回所述列。这是在VB中。

| Folder|    Times 
------------------------
| ABC   |      3       |
| CDE   |      2       | 
| ACD   |      2       |
| ABC   |      1       | 

这给了我一个新的集合,行名为 Folder。但没有列时间。

我如何修改代码,使其同时提供文件夹和时间列。但我只想检查文件夹列的唯一值。

预期结果

| Folder|    Times 
------------------------
| CDE   |      2       | 
| ACD   |      2       |

Dim objUniqueValues As DataTable
Dim objSortedInput As DataTable
objUniqueValues = GetDataTable(ColumnName,"System.String")

InputCollection.DefaultView.Sort = ColumnName
objSortedInput = InputCollection.DefaultView.ToTable

Dim strValue As String
strValue = ""
Dim drInput as DataRow
For Each drInput in objSortedInput.Rows
    If(strValue <> drInput(ColumnName))
        strValue = drInput(ColumnName)
        Dim row As DataRow = objUniqueValues.NewRow()
        row(ColumnName) = strValue
        objUniqueValues.Rows.Add(row)
    End If
Next

UniqueValues = objUniqueValues

谢谢!

标签: vb.net

解决方案


我认为您想要的是一个仅在列表中出现一次的文件夹表以及与该文件夹关联的时间。如果此信息存储在数据库中,则以下 select 语句可能会执行此操作。我以 MS SQL Server 为例。

Private Sub GetUnique()
        Dim dt As New DataTable
        Using cn As New SqlConnection("Your Connection String")
            Dim strSQL As String = "Select Folder, Count(Folder) As Unique, Sum(Times) TotalTimes From MyTable Where Unique = 1 Group By Folder;"
            Using cmd As New SqlCommand(strSQL, cn)
                cn.Open()
                Using dr As SqlDataReader = cmd.ExecuteReader
                    dt.Load(dr)
                End Using
            End Using
        End Using
        DataGridView1.DataSource = dt
    End Sub

推荐阅读