在这也说明下,除此之外还可以通过 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();
}
}

最新文章

  1. js保留两位小数
  2. 如何通过Azure Service Management REST API管理Azure服务
  3. WinForm窗体PropertyGrid控件的使用
  4. Spring依赖注入(IOC)那些事
  5. [转载]SharePoint 2013搜索学习笔记之自定义结果源
  6. int a=5,则 ++(a++)的值是?
  7. Python 深拷贝和浅拷贝
  8. 记录一次Android交叉编译ffmpeg排查错误
  9. PermGen space错误解决方法
  10. Android(java)学习笔记231:服务(service)之混合方式开启服务
  11. 我的第一个QML Button的实现
  12. 2014 HDU多校弟八场H题 【找规律把】
  13. [SignalR]配置路由
  14. YARN学习总结
  15. Python argparse模块实现模拟 linux 的ls命令
  16. Spring多线程批量发送邮件(ThreadPoolTaskExecutor)
  17. git无法提交问题
  18. MySQL 变量类型
  19. 第32节:Java中-构造函数,静态方法,继承,封装,多态,包
  20. centos7下安装docker(5镜像命名)

热门文章

  1. SQL2005查询所有表的大小
  2. 代码自动生成工具MyGeneration之一(程序员必备工具)
  3. C#.NET数据库访问类DBHelper
  4. Eclipse+Maven构建web项目及部署时Maven lib依赖问题的解决
  5. ubuntu下查看文件md5
  6. nginx,FastCGI启动语句
  7. uploadify上传文件Firefox浏览器上传失败解决方法
  8. linux内核系统调用和标准C库函数的关系分析
  9. endif、endforeach
  10. Google实习面试归来