大型排序数据表“包裹”

时间:2012-02-13 17:08:22

标签: c# .net sorting datatable duplicates

我正在尝试从包含超过50,000行的.NET数据表中删除重复项。我的方法很简单:我想按字母顺序对数据表进行排序,然后扫描查找与其上方行相同的行。

我遇到的问题是数据表在排序时会“包裹”。我用它来对它进行排序:

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 :(得分:0)

myDataTable.DefaultView.Sort = "name";

在这里,您要为DataView而不是DataTable排序DataTable。 所以你必须使用DataViewmyDataTable.DefaultView) 或获取按名称排序的DataRow的{​​{1}}

DataTable

答案 1 :(得分:0)

您可以使用this重载来完成此任务。

DataTable uniqueTable = myDataTable.DefaultView.ToTable("UniqueStuff", true, "SomeCol", "AnotherCol", "YetAnotherCol");