将已排序的DataView转换为类型化的DataTable

4

我有一个强类型的DataTable,名为Account,我按照Account.FullName进行了排序:

DataView dvAccount = new DataView(dtAccount)
dvAccount.Sort = "FullName desc";

全名是我的数据集在查询后生成的字段,基于名字、中间名和姓氏等。这意味着很遗憾,无法通过SQL查询进行排序。

首先我尝试以以下方式获取表格:

dtAccount = dvAccount.Table()

但是这给我提供了原始表格,而数据视图是基于这个表格的。因此,在线阅读后,我发现应该使用DataView.ToTable()函数而不是DataView.Table()函数:

dtAccount = dvAccount.ToTable() as dsAccount.AccountDataTable; // returns null
dtAccount = ((dsAccount.AccountDataTable) dvAccount.ToTable()); // gives Convertion to Typed Datatable Error

现在我遇到的问题是我的账户表是强类型的。所以在网上搜索后,我发现可以使用DataTable.Merge()函数或DataTable.ImportRow()函数来处理每一行,但是这些被认为是非常耗费资源的过程,因为每一行都要进行类型检查。那么在这种情况下,最佳的实践解决方案是什么呢?


为什么不从 DataSet 中移除 DataTable,然后将排序后的 DataTable 添加到 DataSet 中呢? - Nikhil Agrawal
嗨,Nikhil!感谢您的快速回复。您能提供一个示例或更详细的解释来说明您的提示吗?我正在使用带有数据集层和业务层(多层设置)的Asp.Net,在后者中最好进行排序,因为我在多个位置重复使用我的数据集与查询。 - Jeroen
1个回答

5

我刚遇到了同样的问题。我使用了这种解决方案。

        dtAccount = New dsAccount.AccountDataTable;
        dtAccount.Merge(dvAccount.ToTable());

这个对我来说很好用。 如果你有更好的,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接