C# 两个datatable 左连接
a(id,sn,kc)b(id,sn,cj)这两个表a连b,然后新的结果或是datatable中包括a、b所有内容,不重复显示id,sn.求高手怎么写。连接用id,sn...
a(id,sn,kc)
b(id,sn,cj)
这两个表 a连b,然后新的结果或是datatable中包括a、b所有内容,不重复显示id,sn.求高手怎么写。
连接用id,sn 展开
b(id,sn,cj)
这两个表 a连b,然后新的结果或是datatable中包括a、b所有内容,不重复显示id,sn.求高手怎么写。
连接用id,sn 展开
2个回答
展开全部
//表a
DataTable a = new DataTable();
a.Columns.Add("id", typeof(int));
a.Columns.Add("sn", typeof(int));
a.Columns.Add("kc", typeof(int));
//表b
DataTable b = new DataTable();
b.Columns.Add("id", typeof(int));
b.Columns.Add("sn", typeof(int));
b.Columns.Add("cj", typeof(int));
//测试数据
a.Rows.Add(1, 1, 2);
a.Rows.Add(1, 2, 3);
a.Rows.Add(1, 2, 4);
b.Rows.Add(1, 1, 11);
b.Rows.Add(1, 2, 12);
b.Rows.Add(2, 1, 3);
//合并后的表游兆
DataTable c = new DataTable();
c.Columns.Add("id", typeof(int));
c.Columns.Add("sn", typeof(int));
c.Columns.Add("kc", typeof(int));
c.Columns.Add("cj", typeof(int));
List<int> lstbRowsIndex = new List<int>();
foreach (DataRow rowa in a.Rows)
{
bool matchFlag = false;
for (int i = 0; i < b.Rows.Count; i++)
{
if (lstbRowsIndex.Contains(i)) continue;
DataRow rowb = b.Rows[i];
//以id、sn作为合并的比较项
if (int.Parse(rowa["id"].ToString()) == int.Parse(rowb["id"].ToString()) &&
int.Parse(rowa["sn"].ToString()) == int.Parse(rowb["sn"].ToString()))
州知 {
lstbRowsIndex.Add(i);
//id、sn在ab两表中都存在时
c.Rows.Add(rowa["id"], rowa["sn"], rowa["kc"], rowb["cj"]);
册磨消matchFlag = true;
break;
}
}
if (!matchFlag)
{
//id、sn只存在于a表中
c.Rows.Add(rowa["id"], rowa["sn"], rowa["kc"], DBNull.Value);
}
}
for (int i = 0; i < b.Rows.Count; i++)
{
if (lstbRowsIndex.Contains(i)) continue;
DataRow rowb = b.Rows[i];
//id、sn只存在于b表中
c.Rows.Add(rowb["id"], rowb["sn"], DBNull.Value, rowb["cj"]);
}
如上所示
展开全部
var query =
from rHead in a.AsEnumerable()
和物 join rTail in b.AsEnumerable()
on
御告 new {ID=rHead.Field<Int32>("id"),SN=rHead.Field<Int32>("sn")} equals new{ID= rTail.Field<Int32>("id"), SN=rTail.Field<Int32>("sn")
select new
{
id= rHead.Field<Int32>("id"),
sn= rHead.Field<String>("sn"),
kc= rHead.Field<Int32>("kc"),
cj= rTail.Field<Int32>("cj")
};
DataTable dtNew = DtAll.Clone();
唤拆液 foreach (var obj in query)
{
dtNew.Rows.Add(obj.id, obj.sn, obj.kc, obj.cj);
}
return dtNew ;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询