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
展开
 我来答
心如小岸
2017-03-14 · TA获得超过323个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:56.3万
展开全部
//表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"]);
}

如上所示

丅明白
2019-12-19 · TA获得超过155个赞
知道小有建树答主
回答量:185
采纳率:100%
帮助的人:34.6万
展开全部
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 ;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式