过滤DataTable中的重复记录

在实际项目中,通过前台数据构造出来的DataTable中往往存在重复的记录,需要对此DataTable做滤重处理,可以功过DataView.ToTable()方法来实现,具体示例如下:

代码
1 public FilterDuplicate()
2 {
3 DataTable dt = new DataTable("person");
4 dt.Columns.Add("name", typeof(string));
5 dt.Columns.Add("age", typeof(string));
6 dt.Columns.Add("sex", typeof(string));
7
8 dt.Rows.Add("makan", "28", "");
9 dt.Rows.Add("makan", "28", "");
10 dt.Rows.Add("zhengrui", "28", "");
11
12 Console.WriteLine("Source DataTable Info");
13 outputDt(dt);
14
15 string[] distinctcols = new string[(dt.Columns.Count)];
16 foreach (DataColumn dc in dt.Columns)
17 {
18 distinctcols[dc.Ordinal] = dc.ColumnName;
19 }
20
21 DataTable dtfd = new DataTable("personFilterDup");
22 DataView mydataview = new DataView(dt);
23 dtfd = mydataview.ToTable(true, distinctcols);
24
25 Console.WriteLine("FilterDuplicate DataTable Info");
26 outputDt(dtfd);
27 }
28
29 public void outputDt(DataTable dt)
30 {
31 Console.WriteLine("DataTable Name="+dt.TableName);
32 foreach (DataRow dr in dt.Rows)
33 {
34 foreach (DataColumn dc in dt.Columns)
35 {
36 Console.Write(dc.ColumnName + "=" + dr[dc.Ordinal].ToString() + "\t");
37 }
38 Console.WriteLine("");
39 }
40 }

通过以上方法,即可快速实现滤重处理.ToTable()一共有四个重载方法:

1、ToTable()

2、ToTable(String)

3、ToTable(Boolean, array<String>[])

4、ToTable(String, Boolean, array<String>[])

参数说明:
tableName
类型:System.String

返回的 DataTable 的名称。

distinct
类型:System.Boolean

如果为 true,则返回的 DataTable 将包含所有列都具有不同值的行。默认值为 false

columnNames
类型:array<System.String>[]

一个字符串数组,包含要包括在返回的 DataTable 中的列名的列表。DataTable 包含指定的列,其顺序与这些列在该数组中的顺序相同。

返回值

类型:System.Data.DataTable

一个新的 DataTable 实例,其中包含所请求的行和列。

原文地址:https://www.cnblogs.com/advocate/p/1786095.html