110,533
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace Utility
{
public class DTHelper
{
/// <summary>
/// 取两个DataTable的交集,删除重复数据
/// </summary>
/// <param name="sourceDataTable">源DataTable</param>
/// <param name="targetDataTable">目标DataTable</param>
/// <param name="primaryKey">两个表的主键</param>
/// <returns>合并后的表</returns>
public static DataTable Merge(DataTable sourceDataTable, DataTable targetDataTable, string primaryKey)
{
if (sourceDataTable != null || targetDataTable != null || !sourceDataTable.Equals(targetDataTable))
{
sourceDataTable.PrimaryKey = new DataColumn[] { sourceDataTable.Columns[primaryKey] };
DataTable dt = targetDataTable.Copy();
foreach (DataRow tRow in dt.Rows)
{
//拒绝自上次调用 System.Data.DataRow.AcceptChanges() 以来对该行进行的所有更改。
//因为行状态为DataRowState.Deleted时无法访问ItemArray的值
tRow.RejectChanges();
//在加载数据时关闭通知、索引维护和约束。
sourceDataTable.BeginLoadData();
//查找和更新特定行。如果找不到任何匹配行,则使用给定值创建新行。
DataRow temp = sourceDataTable.LoadDataRow(tRow.ItemArray, true);
sourceDataTable.EndLoadData();
sourceDataTable.Rows.Remove(temp);
}
}
sourceDataTable.AcceptChanges();
return sourceDataTable;
}
}
}
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
var dt3 = from r in dt1.AsEnumerable()
where !(
from rr in dt2.AsEnumerable()
select rr.Field<int>("Id")
).Contains(r.Field<int>("Id"))
select r;