2011-10-07 56 views

回答

5

以下的工作,如果你只希望重複行(跳過那些具有相同的ID和姓名):

Dim distinctRows = From r In tbl 
     Group By Distinct = New With {Key .ID = CInt(r("ID")), Key .Name = CStr(r("Name"))} Into Group 
     Where Group.Count = 1 
     Select Distinct 
' Create a new DataTable containing only the unique rows ' 
Dim tblDistinct = (From r In tbl 
     Join distinctRow In tblDistinct 
     On distinctRow.ID Equals CInt(r("ID")) _ 
     And distinctRow.Name Equals CStr(r("Name")) 
     Select r).CopyToDataTable 

如果你想從原表中刪除複本:

Dim tblDups = From r In tbl 
     Group By Dups = New With {Key .ID = CInt(r("ID")), Key .Name = CStr(r("Name"))} Into Group 
     Where Group.Count > 1 
     Select Dups 
Dim dupRowList = (From r In tbl 
     Join dupRow In tblDups 
     On dupRow.ID Equals CInt(r("ID")) _ 
     And dupRow.Name Equals CStr(r("Name")) 
     Select r).ToList() 

For Each dup In dupRowList 
    tbl.Rows.Remove(dup) 
Next 

這裏是您的示例數據:

Dim tbl As New DataTable 
tbl.Columns.Add(New DataColumn("ID", GetType(Int32))) 
tbl.Columns.Add(New DataColumn("Name", GetType(String))) 
Dim row = tbl.NewRow 
row("ID") = 1 
row("Name") = "AAA" 
tbl.Rows.Add(row) 
row = tbl.NewRow 
row("ID") = 2 
row("Name") = "BBB" 
tbl.Rows.Add(row) 
row = tbl.NewRow 
row("ID") = 3 
row("Name") = "CCC" 
tbl.Rows.Add(row) 
row = tbl.NewRow 
row("ID") = 1 
row("Name") = "AAA" 
tbl.Rows.Add(row) 
row = tbl.NewRow 
row("ID") = 4 
row("Name") = "DDD" 
tbl.Rows.Add(row) 
0

您可以使用DataTable的DefaultView.ToTable方法來執行fil像這樣:

Public Sub RemoveDuplicateRows(ByRef rDataTable As DataTable) 
    Dim pNewDataTable As DataTable 
    Dim pCurrentRowCopy As DataRow 
    Dim pColumnList As New List(Of String) 
    Dim pColumn As DataColumn 

    'Build column list 
    For Each pColumn In rDataTable.Columns 
     pColumnList.Add(pColumn.ColumnName) 
    Next 

    'Filter by all columns 
    pNewDataTable = rDataTable.DefaultView.ToTable(True, pColumnList.ToArray) 

    rDataTable = rDataTable.Clone 

    'Import rows into original table structure 
    For Each pCurrentRowCopy In pNewDataTable.Rows 
     rDataTable.ImportRow(pCurrentRowCopy) 
    Next 
End Sub