【问题标题】:Subtraction of Data in two DataTables两个数据表中的数据相减
【发布时间】:2018-11-30 06:37:12
【问题描述】:

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

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

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();

第二个数据表的代码与上面相同,只是它正在使用新值进行更新。

【问题讨论】:

  • 这里不用请求许可,直接去吧。如果您有任何问题,请发布。
  • 我没有要求任何类型的权限。
  • 我已经发布了我的问题,没有征求许可
  • batch_num上两个数据表的关系?
  • 批次编号是唯一的,它是从数据库中检索的。两个数据表中的批号匹配应该是这样的。然后在那里减去 QTY 列并将 BATCH_NUM 和 QTY 存储在第三个数据表中,

标签: c# sql linq data-binding datatable


【解决方案1】:

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

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"])
});

【讨论】:

  • 非常感谢亲爱的。
  • @Niazi 如果有用,请点赞或标记为答案,以便其他人在遇到相同问题时可以参考。谢谢!
  • 现在我正在尝试通过执行此 dataGrid2.ItemsSource = result.DefaultView; 将此 var 结果显示到 DataGrid 中;但它给了我这个错误,它不包含 DefaultView 的定义。
  • 我认为,Result 不是 DataView。所以你需要准备一个数据表或数据视图来显示它。这是我创建的非常基本的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
相关资源
最近更新 更多