繁体   English   中英

比较具有多个列且具有唯一ID的两个数据表

[英]compare two datatables with multiple columns with a unique id

我编写了一个程序来比较两个具有唯一ID的数据表,并创建另一个数据表以插入某些具有相同ID的列。 我在下面说明了我的要求。

这些是需要比较的表:

在此处输入图片说明

在此处输入图片说明

我需要以下输出

在此处输入图片说明

但是我收到一个空表。 我不明白我哪里出错了。 你能帮我这个忙吗? 我在下面提供了我的编码,请不要说数量和输入是两个数据表

DataTable result = new DataTable();
result.Columns.AddRange(new DataColumn[2] { new DataColumn("id"), new DataColumn("qty") });         


            foreach (DataRow row1 in input.Rows)
            {
                foreach (DataRow row2 in quantity.Rows)
                {
                    if (row1["id"].ToString() == row2["id"].ToString())
                    {
                        result.ImportRow(row2);
                    }
                    else
                    {
                        result.ImportRow(row1);
                    }
                }
            }

        return result;

您需要2个数据表的左连接

        DataTable dtinput = new DataTable();
        DataTable dtquantity = new DataTable();

        dtinput.Columns.Add("id",typeof(int));
        dtinput.Rows.Add("2");
        dtinput.Rows.Add("4");
        dtinput.Rows.Add("7");

        dtquantity.Columns.Add("id", typeof(int));
        dtquantity.Columns.Add("qty", typeof(int));
        dtquantity.Rows.Add("1", "12");
        dtquantity.Rows.Add("2", "13");
        dtquantity.Rows.Add("3", "5");
        dtquantity.Rows.Add("4", "6");
        dtquantity.Rows.Add("7", null);

        var results = from table1 in dtinput.AsEnumerable()
                      join table2 in dtquantity.AsEnumerable()
                      on (int)table1["id"] equals (int)table2["id"]
                      into outer
                      from row in outer.DefaultIfEmpty<DataRow>()
                      select row;
        DataTable dt = results.CopyToDataTable();

此图应在将来对您有所帮助:

在此处输入图片说明

尝试这样的事情:

var result = input.Rows.Where(x => quantity.Rows.Amy(y => x == y));

我希望这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM