就象 select distinct 字段名 from 表名 一样在datatable中的select 应该怎么做啊 回复内容【wwwiii520】:占個沙發```搞不懂lz意思【ezhuyin】:public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName){ DataTable dt = new DataTable(TableName); dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType); object LastValue = null; foreach (DataRow dr in SourceTable.Select("", FieldName)) { if ( LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])) ) { LastValue = dr[FieldName]; dt.Rows.Add(new object[]{LastValue}); } } if (ds != null) ds.Tables.Add(dt); return dt;}【outh24】:如果有LINQ的话就好办……没有的话,有个笨方法,定义另一个datatable,从现在的数据源里取不重复的部分写入到新的dt中【fuda_1985】:关注!【scjyjl】:没找到ColumnEqual,请问要using什么才有这个啊,而且我在MSDN中也没索引到,可以讲讲吗【ezhuyin】:思路:首先建立一个临时数据表,然后把源DataTable Sort起来,然后逐行读取源数据,并且跟最后一次添加的数据比较,如果相同,则不添加,如果不同,则添加进临时表。做点小改动,则可以适应更多环境。public DataTable SelectDistinct(string TableName, DataTable SourceTable, string[] FieldNames){DataTable dt = new DataTable(TableName);System.Text.StringBuilder FiledNameBuilder = new System.Text.StringBuilder("");string SortStr = "";foreach (string FieldName in FieldNames){dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);FiledNameBuilder.Append(FieldName + ",");}if (FiledNameBuilder.ToString().Length>0){SortStr = FiledNameBuilder.ToString();SortStr = SortStr.Substring(0,SortStr.Length-1);}object[] LastValue = new object[FieldNames.Length];foreach (DataRow dr in SourceTable.Select("",SortStr)){if (LastValue == null || !IsEqual(dr,LastValue)){for (int i = 0; i < LastValue.Length; i++){LastValue[i] = dr[FieldNames[i]];}dt.Rows.Add(LastValue);}}if (ds != null)ds.Tables.Add(dt);return dt;}private bool IsEqual(DataRow dr, object[] Value){bool Equal = true;int current = 0;while (Equal && current < Value.Length){if (!dr[current].Equals(Value[current])){Equal = false;}else{current++;}}return Equal;}【ezhuyin】:没找到ColumnEqual,请问要using什么才有这个啊,而且我在MSDN中也没索引到,可以讲讲吗哈,不好意思,那个是单独的方法:private bool ColumnEqual(object A, object B){ if ( A == DBNull.Value && B == DBNull.Value ) // 两个都是 DBNull.Value return true; if ( A == DBNull.Value || B == DBNull.Value ) // 只有一个是 DBNull.Value return false; return ( A.Equals(B) ); // 正常比较}【ezhuyin】:if (!dr[current].Equals(Value[current]))又一个错误,修改成if (!ColumnEqual(dr[current],Value[current]))【scjyjl】:谢谢ezhuyin