从VB中的集合中获取唯一行

时间:2018-07-04 00:45:07

标签: vb.net

当前,此代码获取列的唯一值 “文件夹”并返回说明的列。这是在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

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您想要的是一个文件夹表,该表在列表和与该文件夹相关联的时间中仅出现一次。如果此信息存储在数据库中,则可以使用以下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