//对DataTable进行Distinct DataTable priceDetailDistinctTable = m_PriceDetailDataTable.DefaultView.ToTable(true, new String[] { "vendor_id", "vendor_code", "vendor_name", "vendor_site" }); // 来自: 选择DataTable中的唯一值(Distinct) 开发中经常用到筛选DataTable等数据源中的唯一值(类似SQL中Distinct的返回结果),在.NET FX 1.x下我是这写的: static DataTable SelectDistinct(string ReturnTableName, DataTable SourceTable, string ReturnFieldName, string AdditionalFilterExpression) { DataTable dt = new DataTable(ReturnTableName); dt.Columns.Add(ReturnFieldName, SourceTable.Columns[ReturnFieldName].DataType); object LastValue = null; foreach (DataRow dr in SourceTable.Select("", ReturnFieldName)) { if (LastValue == null || !(ColumnEqual(LastValue, dr[ReturnFieldName]))) { LastValue = dr[ReturnFieldName]; dt.Rows.Add(new object[] { LastValue }); } } if (ds != null) ds.Tables.Add(dt); return dt; } static bool ColumnEqual(object A, object B) { // Compares two values to see if they are equal. Also compares DBNULL.Value. // Note: If your DataTable contains object fields, then you must extend this // function to handle them in a meaningful way if you intend to group on them. if (A == DBNull.Value && B == DBNull.Value) // both are DBNull.Value return true; if (A == DBNull.Value || B == DBNull.Value) // only one is DBNull.Value return false; return (A.Equals(B)); // value type standard comparison } //后来这样写: private DataTable SelectDistinct(DataTable sourceTable, string sourceColumn) { DataTable result = null; try { result = new DataTable(); result.Columns.Add(sourceColumn, sourceTable.Columns[sourceColumn].DataType); Hashtable ht = new Hashtable(); foreach (DataRow dr in sourceTable.Rows) { if (!ht.ContainsKey(dr[sourceColumn])) { ht.Add(dr[sourceColumn], null); DataRow newRow = result.NewRow(); newRow[sourceColumn] = dr[sourceColumn]; result.Rows.Add(newRow); } } return result; } catch (System.Exception ex) { ExceptionManager.Publish(ex); return null; } finally { if (result != null) result.Dispose(); } } //再后来又这样写: object[] distinctRoomType = GetDistinctValues(dt, "Roomtype"); // Here is the method definition. public object[] GetDistinctValues(DataTable dtable, string colName) { Hashtable hTable = new Hashtable(); foreach (DataRow drow in dtable.Rows) { try { hTable.Add(drow[colName], string.Empty); } catch { } } object[] objArray = new object[hTable.Keys.Count]; hTable.Keys.CopyTo(objArray, 0); return objArray; } //现在.NET FX 2.0中只要一句就可以搞定了,方便了许多: DataTable d = dataSetName.dataTableName.DefaultView.ToTable(true, new string[] { "ColumnName" });