簡體   English   中英

Vb.Net數據表中的不同行

[英]Distinct Rows From Vb.Net DataTable

我有一種情況,在這種情況下,我必須對DataTable應用不同的過濾器,並僅查找不同的行,我正在使用dt.DefaultView.ToTable(True, Columns)此語句,但沒有效果。

這是我的代碼塊。

Try
        Dim dTable As New DataTable()
        dTable.Columns.Add("AutoID")
        dTable.Columns.Add("AnotherID")
        dTable.Columns.Add("CitY")
        Dim row As DataRow = Nothing
        For i As Integer = 0 To 4
            row = dTable.NewRow()
            row("AutoID") = i + 1
            row("AnotherID") = i + 10
            row("City") = "Vetican"
            dTable.Rows.Add(row)
        Next
        dTable.Rows.Add(6, "11", "Oslo")
        dTable.Rows.Add(7, "12", "Toronto")

        Dim TobeDistinct As String() = {"AnotherID"}
        Dim dtDistinct As DataTable = GetDistinctRecords(dTable, TobeDistinct)

    Catch ex As Exception

    End Try

和方法..

Public Shared Function GetDistinctRecords(ByVal dt As DataTable, ByVal Columns As String()) As DataTable
    Dim dtURecords As New DataTable()
    dtURecords = dt.DefaultView.ToTable(True, Columns)
    Return dtURecords
End Function

這是我想要的屏幕截圖。

您要保留哪些行以及應刪除哪些行? 如果只想為每個AnotherID保留一行,那么保留Vetican而不是Oslo似乎是任意的。 也許您Vetican, Oslo那樣同時使用這兩種設備。

我會改用Linq

Dim resultTable = dTable.Clone() ' empty table same columns
Dim idGroups = dTable.AsEnumerable().GroupBy(Function(r) r.Field(Of String)("AnotherID"))
For Each grp In idGroups
    Dim r As DataRow = resultTable.Rows.Add()
    r.SetField("AutoID", grp.First().Field(Of String)("AutoID"))
    r.SetField("AnotherID", grp.Key)
    Dim cities = From row In grp Select row.Field(Of String)("City")
    r.SetField("City", String.Join(", ", cities))
Next

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM