我正在尝试从包含超过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];
}
答案 0 :(得分:0)
myDataTable.DefaultView.Sort = "name";
在这里,您要为DataView
而不是DataTable
排序DataTable
。
所以你必须使用DataView
(myDataTable.DefaultView
)
或获取按名称排序的DataRow
的{{1}}
DataTable
答案 1 :(得分:0)
您可以使用this重载来完成此任务。
DataTable uniqueTable = myDataTable.DefaultView.ToTable("UniqueStuff", true, "SomeCol", "AnotherCol", "YetAnotherCol");