使用C#对DataTable进行Distinct操作示例;有一个更简单的方法
public static DataTable SelectDistinct(DataTable SourceTable, string keyFields)
{
DataTable dtRet = SourceTable.Clone();//定义返回记录表
StringBuilder sRet = new StringBuilder();//定义比较对象
//获得参照列列表
string[] sFields = keyFields.Split(',');//获得参照列列表
if (sFields.Length == 0)
throw new ArgumentNullException("无参照列");
int result = 0;//定义循环变量
string sLastValue = "";//定义对照值
SourceTable.Select("", keyFields);//按参照列排序
foreach (DataRow row in SourceTable.Rows)//开始比对
{
sRet.Length = 0;
for (result = 0; result < sFields.Length; result )//将参照列依序组合到字符串中,以','分割,作为比较对象
sRet.Append(row[sFields[result]]).Append(",");
result = string.Compare(sRet.ToString(), sLastValue, true);//进行比较并判断比较结果
switch (result)
{
case 0://相同则放弃
break;
case -1://不同则加入,并将当前比较字符串赋给对照值
case 1:
dtRet.Rows.Add(row.ItemArray);
sLastValue = sRet.ToString();
break;
}
}
return dtRet;
}
文章来自学IT网:http://www.xueit.com/html/2010-04/21-646223995201042792446515.html
有时我们需要从DataTable中抽取Distinct数据,以前总是以对DataTable进行foreach之类纯手工方式获取。
近来发现DataView可以帮我们直接获取Distinct数据,汗一个!
DataTable dataTable;
DataView dataView = dataTable.DefaultView;
DataTable dataTableDistinct = dataView.ToTable(true,"FieldName1","FieldName2","...");//注:其中ToTable()的第一个参数为是否DISTINCT
浙公网安备 33010602011771号