Большие сортированные датированные "обертки" вокруг - PullRequest
0 голосов
/ 13 февраля 2012

Я пытаюсь удалить дубликаты из таблицы данных .NET, состоящей из более чем 50 000 строк.Мой подход прост: я хочу отсортировать данные в алфавитном порядке, а затем просмотреть и найти строки, которые совпадают со строками над ним.

Проблема, с которой я сталкиваюсь, заключается в том, что датируемые данные «оборачиваются», когдаотсортирован.Я использую это для сортировки:

myDataTable.DefaultView.Sort = "name";

Когда я просматриваю данные с помощью отладчика, они сортируются по кусочкам в алфавитном порядке, например:

Aardvark
Apple
Banana
...(20,000 rows later)...
Aardvark
Angle
Boat

Очевидно, это разрушает мою попыткунайти дубликаты.Это своего рода оптимизационное поведение фреймворка при работе с большими таблицами?Что здесь происходит?

Решение:

Вот что я делал ..

myDataTable.DefaultView.Sort = "name";
for (int i =0; i< myDataTable.DefaultView.Table.Rows.Count; i++)
{
    var thisRow = myDataTable.DefaultView.Table.Rows[i];
    var prevRow = myDataTable.DefaultView.Table.Rows[i-1];
}

Вот что я должен был сделать:

myDataTable.DefaultView.Sort="name";
var myNewDatatable = myDataTable.DefaultView.ToTable();
for (int i =0; i< myNewDatatable.Rows.Count; i++)
{
    var thisRow = myNewDatatable.Rows[i];
    var prevRow = myNewDatatable.Rows[i-1];
}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2012

Вы можете использовать эту перегрузку для достижения этой цели.

DataTable uniqueTable = myDataTable.DefaultView.ToTable("UniqueStuff", true, "SomeCol", "AnotherCol", "YetAnotherCol");
0 голосов
/ 13 февраля 2012
myDataTable.DefaultView.Sort = "name";

Здесь вы сортируете DataView для DataTable, а не DataTable.Таким образом, вы должны либо использовать DataView (myDataTable.DefaultView), либо получить DataRow из DataTable, отсортированных по имени

DataRow[] sorted = myDataTable.Select("", "name");
...