在 ADO.NET 1.x & 2.0 中, System.Data.DataTable 类虽然公开 Select 方法,但不支持 DISTINCT 关键字,而我们在实际开发中免不了有这样的需求:对已有 DataTable 进行 SELECT DISTINCT ,返回指定列具有唯一值的行,这些行存在新的 DataTable 中。
对于此问题,很早就有人提出来了,大家也做了很多尝试。
看到 CSDN 中常有人有此疑问,这里再次总结下,便于参阅。
ADO.NET 1.x
对于此版本,没有任何捷径,只有自己手工实现,这里收集两个比较常用的方法:
Select DISTINCT on DataTable
http://weblogs.asp.net/eporter/archive/2005/02/10/370548.aspx
HOWTO: VisualC # .NET 中实现 DataSet SELECTDISTINCT Helper 类
http://support.microsoft.com/kb/326176/zh-cn
推荐方法1,此实现更具性能比。
ADO.NET 2.0
对于此版本, 虽然 DataTable.Select 方法依然不支持 DISTINCT ,但是与 DataTable 密切相关的 DataView 类实现了几个重载版本的 ToDataTable 方法,根据现有 DataView 中的行,创建并返回一个新的 DataTable。
其中
public DataTable ToTable (
bool distinct,
params string[] columnNames
)
public DataTable ToTable (
string tableName,
bool distinct,
params string[] columnNames
)
支持 distinct 指示是否对 columnNames 内所有列进行 DISTINCT 操作。
private static void DemonstrateDataView()
}