DataTable 去除重复的问题
代码如下:
【我想能否把DataTableRowCompare: 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")));
}
是动态获取字段的,不然有的表字段很多,里面就得手动加很多进去。
比如能否直接以类似这样的形式来实现
field1,field1,field1,field1,field1,field1,field1 =>类似这样一段字符串,然后方法自动处理这个字符串,比如用split 然后自动解析这些传进来的字符串。
求大神们指教
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"] = 1;
_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"] = 1;
_dr["name"] = "xiaodong";
_dr["address"] = "shanghai";
_dt.Rows.Add(_dr);
_dr = _dt.NewRow();
_dr["id"] = 3;
_dr["name"] = "xiaoming";
_dr["address"] = "guangdong";
_dt.Rows.Add(_dr);
_dr = _dt.NewRow();
_dr["id"] = 4;
_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
}
}
}
【我想能否把DataTableRowCompare: 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")));
}
是动态获取字段的,不然有的表字段很多,里面就得手动加很多进去。
比如能否直接以类似这样的形式来实现
field1,field1,field1,field1,field1,field1,field1 =>类似这样一段字符串,然后方法自动处理这个字符串,比如用split 然后自动解析这些传进来的字符串。
求大神们指教
...全文
相关推荐
DataTable合并重复行(解决方案)
DataTable合并重复行(解决方案)
检查GridControl列表视图某列是否有重复数据
自己花时间写的,检查GridControl列表视图某列是否有重复数据
合并两DataTablet 和DataSet.rar
合并两DataTablet 和DataSet.rar
批量插入数据库方法
此代码使用C#编码,可以批量的把读取的数据插入数据库,常见于批量导入数据等。
datatable去掉重复行的方法
去掉DataTable中(所有列的数据都相同)重复的行: 代码如下: //DataView dv = dt3.DefaultView; //dt3默认的虚拟视图 //dv.Sort = “wmid asc”; //排序 ///dv.ToTable(true, “列名,列名,列名”); ///第一个参数,true 去除重复,false 不去除 ///第二个参数,需要显示的字段 DataView dv = new DataView(dtname); //dtname指需去掉重复行的datatable名dtname = dv.ToTable(true);


