大排序数据表“;“包装”;围绕
本文关键字:围绕 包装 排序 数据表 | 更新日期: 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
。因此,您必须使用DataView
(myDataTable.DefaultView
)或获取按名称排序的DataTable
的DataRow
DataRow[] sorted = myDataTable.Select("", "name");
您可以使用这个重载来实现这一点。
DataTable uniqueTable = myDataTable.DefaultView.ToTable("UniqueStuff", true, "SomeCol", "AnotherCol", "YetAnotherCol");