在这也说明下,除此之外还可以通过 DataView 的方式来处理,当个人觉得这有点不好用。这里就不多作说明了

代码比较简单,直接看代码

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq; namespace DTS
{
class Program
{
static void Main(string[] args)
{
DataTable _dt = new DataTable();
_dt.Columns.Add("id", typeof(int));
_dt.Columns.Add("name", typeof(string));
_dt.Columns.Add("address", typeof(string)); DataRow _dr = _dt.NewRow();
_dr["id"] = ;
_dr["name"] = "xiaodong";
_dr["address"] = "beijing";
_dt.Rows.Add(_dr);
_dt.Rows.Add(_dr.ItemArray);
_dt.Rows.Add(_dr.ItemArray);
_dr = _dt.NewRow(); _dr["id"] = ;
_dr["name"] = "xiaodong";
_dr["address"] = "shanghai";
_dt.Rows.Add(_dr);
_dr = _dt.NewRow(); _dr["id"] = ;
_dr["name"] = "xiaoming";
_dr["address"] = "guangdong";
_dt.Rows.Add(_dr);
_dr = _dt.NewRow(); _dr["id"] = ;
_dr["name"] = "xudaxia";
_dr["address"] = "fujian";
_dt.Rows.Add(_dr);
_dt.Rows.Add(_dr.ItemArray);
Console.WriteLine("--------------------原来有重复数据的Table----------------------");
_dt.AsEnumerable().ToList().ForEach(
m=>
{
Console.WriteLine(m["id"].ToString() + " " + m["name"].ToString() + " " + m["address"].ToString());
}); Console.WriteLine("--------------------去除重复后的Table----------------------");
var _comPresult = _dt.AsEnumerable().Distinct(new DataTableRowCompare());
DataTable _resultDt = _comPresult.CopyToDataTable(); _resultDt.AsEnumerable().ToList().ForEach(
x =>
{
Console.WriteLine(x["id"].ToString() + " " + x["name"].ToString() + " " + x["address"].ToString());
});
Console.Read();
}
public class DataTableRowCompare : IEqualityComparer<DataRow>
{ #region IEqualityComparer<DataRow> 成员 public bool Equals(DataRow x, DataRow y)
{
return ((x.Field<int>("id") == y.Field<int>("id") && x.Field<string>("name") == y.Field<string>("name") && x.Field<string>("address") == y.Field<string>("address")));
} public int GetHashCode(DataRow obj)
{
return obj.ToString().GetHashCode();
} #endregion
} }
}

昨晚(2015-10-11)想了个对以上代码优化的办法,事比较多早上补上:

public static DataTable DistinctSomeColumn(DataTable sourceTable, params string[] fieldName)
{
if (fieldName == null || fieldName.Length == ) return sourceTable;
return sourceTable.AsEnumerable().Distinct(new ColumnEquals(fieldName)).CopyToDataTable();
} public class ColumnEquals : IEqualityComparer<DataRow>
{
public ColumnEquals(string[] sArr)
{
_sArr = sArr;
} private string[] _sArr; public bool Equals(DataRow x, DataRow y)
{
return !_sArr.Any(p => !x[p].Equals(y[p]));
} public int GetHashCode(DataRow dr)
{
return dr.ToString().GetHashCode();
}
}

使用Linq 来解决Datatable 去除数据重复的更多相关文章

  1. Mysql 解决left join 数据重复的问题

    select p.*,g.roleName,pg.srcType from t_gold_pay_add p left join gRole g on p.roleID=g.roleID left j ...

  2. 每日学习心得:Linq解决DataTable按照某一列的值排序问题/DataTable 导出CSV文件/巧用text-overflow解决数据绑定列数据展示过长问题

    2013-8-5 1 Linq解决DataTable按照某一列的值排序 在之前的总结中提到过对拼接而成的复合的DataTable按照某一列值的大小排序,那个主要的思想是在新建表结构时将要排序的那一列的 ...

  3. 内存中DataTable去除重复行

    删除内存中DataTable表的重复行 假设在内存中(不是数据库中)有两个表: 表一:TableA Name Phone 张三 123456 李四 123457 王五 1234568 表二:Table ...

  4. 解决 MySQL 分页数据错乱重复

    前言 一天,小明兴匆匆的在通讯工具上说:这边线上出现了个奇怪的问题,麻烦 DBA 大大鉴定下,执行语句 select xx from table_name wheere xxx order by 字段 ...

  5. Django——models中导入数据重复的解决办法

    如果你导入数据过多,导入时出错了,或者你手动停止了,导入了一部分,还有一部分没有导入.或者你再次运行上面的命令,你会发现数据重复了,怎么办呢? django.db.models 中还有一个函数叫 ge ...

  6. LINQ查询返回DataTable类型

    个人感觉Linq实用灵活性很大,参考一篇大牛的文章LINQ查询返回DataTable类型 http://xuzhihong1987.blog.163.com/blog/static/267315872 ...

  7. iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)

    一.推荐关注模块(一个控制器控制两个tableView) -- 数据的显示 刚开始加载数据值得注意的有以下几点 导航控制器会自动调整scrollView的contentInset,最好是取消系统的设置 ...

  8. 对DataTable里数据进行排序

    在日常开发过程中,有一个DataTable集合,里面有很多字段,现在要求针对某一列进行排序,如果该列为数字的话,进行ASC即可实现,但是该字段类型为string,此时排序就有点不正确了. 我也不多废话 ...

  9. Oracle分页查询排序数据重复问题

    参考资料: http://docs.oracle.com/database/122/SQLRF/ROWNUM-Pseudocolumn.htm#SQLRF00255 http://blog.csdn. ...

随机推荐

  1. delphi 完全控制Excel 文件

    ( 一 ) 使用动态创建的方法 uses ComObj; 首先创建 Excel 对象Var   ExcelApp : Variant ;   ExcelApp := CreateOleObject ( ...

  2. ltt.js

    var dailyBox = $('.daily-box-office'), curDate = new Date(), curYear = curDate.getFullYear(), curMon ...

  3. 使用 jsPlumb 绘制拓扑图 —— 异步载入与绘制的实现

    本文实现的方法能够边异步载入数据边绘制拓扑图. 有若干点须要说明一下: 1.  一次性获取全部数据并绘制拓扑图. 请參见文章: <使用 JsPlumb 绘制拓扑图的通用方法> ; 本文实现 ...

  4. spring mvc+ajax分页

    分页大致思路:页面每次把当前页传到后台并获得从后台传过来的json数据,解析后布局到这个页面上. 1.服务端代码: @Controller public class MemcachedContrlle ...

  5. java 十六进制数的转换

    今天晚上做了一道java基础题,题目看起来简单,但是实现起来却花了我近两个小时的时间,认真的做这道题,你会发现它特别考你的基本功.有兴趣的可以试一下哦. 题目: 请用此语言编写如下函数,采用自己的算法 ...

  6. [React] Set up React apps with zero configuration

    The React team has an official Command Line Interface (CLI) for building React projects called " ...

  7. ADO.Net的小知识(连接数据库)二

    上次提到数据库连接有两种形式断开式连接和打开式连接,断开式连接我已经讲解了,下面我来给大家讲解一下打开式连接 (1)引入命名空间:using System.Data.SqlClient; 该语句用于导 ...

  8. Linux MySQL-Workbench安装

    yum install pcre-devel libglade2-devel gtkmm24-devel libgnome-devel lua-devel libzip-devel mysql-dev ...

  9. 使用HttpClient发送请求、接收响应

    使用HttpClient发送请求.接收响应很简单,只要如下几步即可. 1.创建HttpClient对象.  CloseableHttpClient httpclient = HttpClients.c ...

  10. Android(java)学习笔记86:案例短信发送器

    1.一般我们第一步都是先创建这个main.xml布局文件,这是良好的习惯: <?xml version="1.0" encoding="utf-8"?&g ...