DataTable,List去重复记录的方法

今天一位朋友问如何去掉DataTable里重复的记录(DataTable是别人返回过来的,不能再重新查询数据库,所以无法用sql中的select distinct xxx处理,只能在DataTable上动脑筋) 

思路:将DataTable转成IEnumerable,然后就能调用Distinct方法了

by 菩提树下的杨过

using System.Collections.Generic; 
using System.Linq; 
using System.Data; 
using System; 

namespace ConsoleApplication2 
{ 
 class Program 
    { 
 static void Main(string[] args) 
        { 
            DataTable tbl = new DataTable(); 
            tbl.Columns.Add("Id", typeof(System.Int32)); 
            tbl.Columns.Add("City", typeof(System.String)); 
            tbl.Columns.Add("Province", typeof(System.String)); 

            tbl.Rows.Add(1, "武汉", "湖北"); 
            tbl.Rows.Add(2, "应城", "湖北"); 
            tbl.Rows.Add(3, "武汉", "湖北"); 

            IEnumerable <DataRow> r = tbl.AsEnumerable().Distinct(new CityComparer()); 
 
 

 //到这一步,r里就是去重复的记录了 

 foreach (var item in r) 
            { 
                Console.WriteLine(item["Id"] + "," + item["City"] + "," + item["Province"]); 
            } 

            Console.ReadLine(); 
        } 


 
    } 

 class CityComparer : IEqualityComparer <DataRow> 
    { 
 public bool Equals(DataRow r1, DataRow r2) 
        { 
 return r1["City"] == r2["City"]; 
        } 

 public int GetHashCode(DataRow obj) 
        { 
 return obj.ToString().GetHashCode(); 
        } 


    } 
} 

上面的代码,将DataTable中"城市名"重复的记录去掉了,以上代码同样适用于List<T>(只要改下"比较器"即可)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

泛型List<T>使用示例

代码来源于"c#高级编程(第4版)",略作修改 using System; using System.Collections; using System.C...

19670
来自专栏技术之路

动态生成TreeView方法(二)

这次是用递归的方法实现 ,我想大家都知道怎么做吧,就不 多说了, 还是不建议用递归,数据量大了会映响速度,动态生成TreeView方法(一)是我比较喜欢的方法 ...

272100
来自专栏Jackson0714

01.策略模式-上篇

35380
来自专栏c#开发者

lightswitch 添加 TreeView 控件

代码片段 <UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presen...

32770
来自专栏飞扬的花生

c#枚举的描述和值

13430
来自专栏跟着阿笨一起玩NET

C#中格式化数据的输出

alignment:可选,是一个带符号的整数,指示首选的格式化字段宽度。如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,并且使用格式化字符串的长度作为字...

10600
来自专栏知识分享

C#虚方法

如果说在一个类中已经使用了一个方法而且已经实现,而我想在它的子类中也想使用这个方法,而且也想实现 就像下面这种样子--但是现在还不能用 using System...

34350
来自专栏Netkiller

使用 HttpClient 调用 Restful 接口

本文节选自《Netkiller Java 手札》 import java.io.IOException; import org.apache.http.Htt...

41360
来自专栏菩提树下的杨过

温故而知新:类索引器

类索引器  1 using System;  2 using System.Collections.Generic;  3  4 namespace Pro...

218100
来自专栏跟着阿笨一起玩NET

C#中汉字排序简单示例(拼音/笔划)

29810

扫码关注云+社区

领取腾讯云代金券