在比较两者的主键之后,从另一个更新一个数据表

时间:2017-09-22 05:55:43

标签: c# sql

我有两个数据表,每个数据表有70-80列不同。我想在比较c#中两者的主键之后,用其他数据表字段值更新一个数据表字段的值。

假设我有一个数据表dt1包含行和60列。

我有另一个数据表dt2包含行和70列。 10列dt1与dt2匹配。 30行dt1与dt2匹配。 所以我想比较两个数据表的主键和之后是否匹配从dt1到dt2的更新列值。

2 个答案:

答案 0 :(得分:0)

这是你的答案,考虑dt1 = Customer和dt2 = Order,CustomerId存在于两个数据表中,我也使用LINQ扩展方法加入它们,最后从两个数据表中选择列。谢谢。

static void Main(string[] args)
    {
        DataTable dt1 = new DataTable(); //dt1=Customer
        dt1.Columns.Add("CustomerId", typeof(int));
        dt1.Columns.Add("Name", typeof(string));

        dt1.Rows.Add(1, "Customer A");
        dt1.Rows.Add(2, "Customer B");
        dt1.Rows.Add(3, "Customer C");

        DataTable dt2 = new DataTable();  //dt2=Order
        dt2.Columns.Add("OrderId", typeof(int));
        dt2.Columns.Add("CustomerId", typeof(int));  //Fk
        dt2.Columns.Add("OrderDate", typeof(DateTime));
        dt2.Columns.Add("OrderAmount", typeof(double));

        dt2.Rows.Add(1, 1,DateTime.Now,15000);
        dt2.Rows.Add(2, 1, DateTime.Now,10000);
        dt2.Rows.Add(3, 2, DateTime.Now,25000);

        var result = dt2.AsEnumerable()
            .Join(dt1.AsEnumerable(),
            x => x.Field<int>("CustomerId"), //Order(CustomerId) FK
            y => y.Field<int>("CustomerId"),  //Customer Id(Pk)
            (x, y) => new { dt2 = x, dt1 = y })  //dt2=Order, dt1=Customer
            .Select(x => new
            {
                OrderId = x.dt2.Field<int>("OrderId"),
                CustomerId = x.dt1.Field<int>("CustomerId"),
                Name = x.dt1.Field<string>("Name"),
                OrderDate = x.dt2.Field<DateTime>("OrderDate"),
                OrderAmount = x.dt2.Field<double>("OrderAmount"),
            });

        foreach (var item in result)
        {
            Console.WriteLine("Order Id: {0}, CustomerId: {1}, Name: {2}, OrderDate: {3}, OrderAmount: {4}",
                item.OrderId,item.CustomerId,item.Name,item.OrderDate,item.OrderAmount);
        }        

        Console.ReadKey();
    }

答案 1 :(得分:0)

不幸的是,您需要单独引用表格。

UPDATE tbl1 SET 
col2c=(SELECT colc2 FROM tbl2 WHERE tbl2_pk=tbl1.tbl1_pk),
col4e=(SELECT cole4 FROM tbl2 WHERE tbl2_pk=tbl1.tbl1_pk)
WHERE test.tbl1.tbl1_pk=(SELECT tbl2_pk FROM tbl2 WHERE tbl1_pk=tbl2_pk)

Link to see results in table pre and post execution