在两个数据表中减去数据

时间:2018-06-21 03:19:59

标签: c# sql linq data-binding datatable

我有两个从数据库填充的数据表。这两个DataGrid具有相同的架构,但是Qty列中的数据不同。我想从第一列减去第二列DataTable的QTY列的值,然后将其存储到第三列DataTable中。

下面是我的第一个数据表的代码。

DataTable newDt1 = dt_1.AsEnumerable()
                       .GroupBy(r => r.Field<int>("batch_num"))
                       .Select(g =>
                                   {
                                        var row = dt_1.NewRow();
                                        row["batch_num"] = g.Key;
                                        row["qty"] = g.Sum(r => Convert.ToInt32(r.Field<int>("qty")));
                                        return row;
                                   })
                       .CopyToDataTable();

第二个DataTable具有与上面相同的代码,只是正在使用新值进行更新。

1 个答案:

答案 0 :(得分:0)

我试图在控制台应用程序中创建您的方案。以下代码将帮助您开发解决方案。

DataTable dt1 = new DataTable();
dt1.Columns.Add("BatchNo");
dt1.Columns.Add("Qty");

DataTable dt2 = new DataTable();
dt2.Columns.Add("BatchNo");
dt2.Columns.Add("Qty");

for (int i = 0; i < 5; i++)
{
    dt1.Rows.Add(i + 1, i + 2);
    dt2.Rows.Add(i + 1, i + 3);
}

var result = dt1.AsEnumerable()
.Join(dt2.AsEnumerable(), d1 => d1["BatchNo"], d2 => d2["BatchNo"], (d1, d2) => new { D1 = d1, D2 = d2 })
.Select(r => new 
{
    BatchNo = Convert.ToInt32( r.D1["BatchNo"] ),
    QtyDifference = Convert.ToInt32(r.D2["Qty"]) - Convert.ToInt32(r.D1["Qty"])
});