我有下面的代码,它有一个数据表dt
。我还有一个名为dt1
的数据表。我想在合并两个表之前检查dt
是否有dt1
数据。如果dt
已有dt1
个数据,我不想合并两个数据表。
理想情况下寻找dt.Exists(dt1)
代码。
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[6] { new DataColumn("ID", typeof(int)),
new DataColumn("Acount", typeof(string)),
new DataColumn("Name", typeof(string)),
new DataColumn("Quarter", typeof(string)),
new DataColumn("FY", typeof(int)),
new DataColumn("Income_percent", typeof(int))});
dt.Rows.Add(1, "ABC", "Ram", "Q1", 2011, 50);
dt.Rows.Add(2, "XYZ", "Hari", "Q4", 2011, 35);
dt.Rows.Add(3, "ABC", "Rohit", "Q3", 2011, 40);
dt.Rows.Add(4, "ABC", "Ram", "Q2", 2011, 25);
dt.Rows.Add(5, "XYZ", "Hari", "Q3", 2011, 60);
DataTable dt1 = new DataTable();
dt1.Rows.Add(3, "ABC", "Rohit", "Q3", 2011, 40);
dt1.Rows.Add(4, "ABC", "Ram", "Q2", 2011, 25);
dt1.Rows.Add(5, "XYZ", "Hari", "Q3", 2011, 60);
}
}
答案 0 :(得分:0)
您可以使用下面提到的代码
var diff = dt.AsEnumerable().Except(dt1.AsEnumerable());
除非您必须添加using System.Linq
命名空间。
你还必须为dt 1指定一个范围
dt1.Columns.AddRange(new DataColumn[6] { new DataColumn("ID", typeof(int)),
new DataColumn("Acount", typeof(string)),
new DataColumn("Name", typeof(string)),
new DataColumn("Quarter", typeof(string)),
new DataColumn("FY", typeof(int)),
new DataColumn("Income_percent", typeof(int))});
答案 1 :(得分:0)
看起来您的数据基于ID列。在这种情况下,您可以使用Linq来比较两个数据表:
IEnumerable<int> idsInDt = dt.AsEnumerable().Select(row => (string)row["ID"]);
IEnumerable<int> idsInDt1 = dt1.AsEnumerable().Select(row => (string)row["ID"]);
IEnumerable<int> newRows = idsInDt1.Except(idsInDt);
然后,您只需根据ID
if(newRows.Count > 0)
// Copy new lines
答案 2 :(得分:0)
你可以用这个
public DataTable getLinq(DataTable dt1, DataTable dt2)
{
DataTable dtMerged =
(from a in dt1.AsEnumerable()
join b in dt2.AsEnumerable()
on
a["Query"].ToString() equals b["Query"].ToString()
into g
where g.Count() > 0
select a).CopyToDataTable();
return dtMerged;
}
有关详细信息,请参阅here