使用方法
//获取第一个数据源DataTable
DataTable _dtSource = DBHelper.GetDataTable("select top 10 ksdid,user_id,user_pwd from ksd_user_info");
IEnumerable<DataRow> query = _dtSource.AsEnumerable().Where(t => t.Field<string>("user_id").StartsWith("66")).ToList();
//获取第二个数据源DataTable
DataTable _dt2 = query.CopyToDataTable();
//比较两个数据源的交集
IEnumerable<DataRow> query2 = _dtSource.AsEnumerable().Intersect(dt2.AsEnumerable(), DataRowComparer.Default);
//两个数据源的交集集合
DataTable dt3 = query2.CopyToDataTable();
//获取两个数据源的并集
IEnumerable<DataRow> query2 = _dtSource.AsEnumerable().Union(dt2.AsEnumerable(), DataRowComparer.Default);
//两个数据源的并集集合
DataTable dt3 = query2.CopyToDataTable();
//获取两个数据源的差集
IEnumerable<DataRow> query2 = _dtSource.AsEnumerable().Except(dt2.AsEnumerable(), DataRowComparer.Default);
//两个数据源的差集集合
DataTable dt3 = query2.CopyToDataTable();
自定义比较器
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kelun.Comparer
{
/// <summary>
/// 计量单位比较器
/// </summary>
class JldwComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
return (x.Field<string>("F_DWBH") == y.Field<string>("F_DWBH") &&
x.Field<string>("F_DWMC") == y.Field<string>("F_DWMC") &&
x.Field<string>("F_DWLX") == y.Field<string>("F_DWLX"));
}
public int GetHashCode(DataRow obj)
{
return obj.ToString().GetHashCode();
}
}
}
根据自定义条件获取差集
// 获取2个数据源的差集
//IEnumerable<DataRow> query = _dt.AsEnumerable().Except(_sdt.AsEnumerable(), DataRowComparer.Default);
IEnumerable<DataRow> query = _dt.AsEnumerable().Except(_sdt.AsEnumerable(), new JldwComparer());
int querynum = query.Count();
if (querynum > 0)
{
var _saveDt = query.CopyToDataTable();
SqlDbHelper.Insert(_saveDt, "HNKL_JLDW_ERP");
var msg = string.Format("计量单位写入成功,共计{0}条", _saveDt.Rows.Count);
Logger.Info(msg, null, "System");
}
文章评论
net4.5的特性么?
@直流水泵 不是,linq的