大排序数据表“;“包装”;围绕

本文关键字:围绕 包装 排序 数据表 | 更新日期: 2023-09-27 18:24:28

我正试图从由50000多行组成的.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];
}

大排序数据表“;“包装”;围绕

myDataTable.DefaultView.Sort = "name";

在这里,您将DataView排序为DataTable,而不是DataTable。因此,您必须使用DataViewmyDataTable.DefaultView)或获取按名称排序的DataTableDataRow

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

您可以使用这个重载来实现这一点。

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