2016-01-18 2 views
0

У меня есть сценарий, в котором я должен применить отдельный фильтр к DataTable и найти только строки, которые являются отличными, Я использую dt.DefaultView.ToTable(True, Columns) этот оператор, но не влияет.Отличительные строки из VB.Net DataTable

Вот мой кусок кода ..

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 

Вот снимок экрана, который я хочу ..

ответ

1

Какие строки вы хотите сохранить и какие строки должны быть удалены? Если вы просто хотите сохранить одну строку за 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 
+0

говорит 'Невозможно привести объект типа 'WhereSelectEnumerableIterator'2 [System.Data.DataRow, System.String] к типу 'System.String []' .' – DareDevil

+0

Я хочу сохранить все четкие строки на основе столбца «AnotherID» – DareDevil

+0

@DareDevil: тогда вы используете .NET 3.5, поэтому Visual Studio 2008. Вы можете использовать 'r.SetField (« Город », String. Присоединиться (",", cities.ToArray())). Я знаю, но какую строку вы хотите сохранить, если у вас есть три дубликата в соответствии с столбцом «AnotherID»? Мой подход выше конкатенирует все города с запятой. –

Смежные вопросы