• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
bobird的学习笔记
博客园    首页    新随笔    联系   管理    订阅  订阅

使用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

posted on 2013-05-09 10:04  bobird  阅读(1751)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3