【问题标题】:Manipulate selective rows from two DataTables从两个数据表中操作选择性行
【发布时间】:2018-06-24 12:15:40
【问题描述】:

我有两个数据表,它们都具有相同类型的架构但具有不同的数据。基本上,我想做的是我想减去那些小于 newDt1 的 newDt 行。 到目前为止,我编写了该代码,但它有一些逻辑错误。

下面是一个包含原始数据的newDt DataTable。

var newDt = dt.AsEnumerable()
          .GroupBy(r => r.Field<int>("batch_num"))
          .Select(g =>
          {
              var row = dt.NewRow();

              row["batch_num"] = g.Key;
              row["qty"] = g.Sum(r => Convert.ToInt32(r.Field<int>("qty")));
              return row;
          }).CopyToDataTable();

下面是 newdt1 数据表,其中包含具有不同 'qty' 列值但相同 'batch_num' 的数据。

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,其中包含从 newDt1 中减去的 newDt 的“数量”。

DataTable result = newDt.AsEnumerable() // IT IS SUBTRACTING NEWDt from NewDt1 and storing result in it.
        .Join(newDt1.AsEnumerable(), d1 => d1["batch_num"], d2 => d2["batch_num"], (d1, d2) => new { D1 = d1, D2 = d2 })
        .Select(r =>
        {
            var row = newDt1.NewRow();
            row["batch_num"] = Convert.ToInt32(r.D1["batch_num"]);

            row["qty"] = Convert.ToInt32(r.D2["qty"]) - Convert.ToInt32(r.D1["qty"]);
            return row;
        }).CopyToDataTable();

            for (int i = 0; i < result.Rows.Count; i++)
            {
                if (Convert.ToInt32(newDt.Rows[i]["qty"]) < (Convert.ToInt32(newDt1.Rows[i]["qty"])))
                {
                    SqlCommand command = new SqlCommand("update batch set sold_qty=sold_qty-@soldqty2, left_qty=left_qty+@soldqty2 where id=@id2", con);
                    command.Parameters.AddWithValue("@soldqty2", Convert.ToInt32(result.Rows[i]["qty"]));
                    command.Parameters.AddWithValue("@id2", Convert.ToInt32(result.Rows[i]["batch_num"]));
                    rexe = command.ExecuteNonQuery();
                }

            }

我希望只减去 'newDT1' 的那些 'qty' 列行,它们小于 'newDT' 的 'qty' 列的行值。

【问题讨论】:

  • 行["qty"] = (Convert.ToInt32(r.D2["qty"]) > Convert.ToInt32(r.D1["qty"])) ? Convert.ToInt32(r.D2["qty"]) - Convert.ToInt32(r.D1["qty"]) : Convert.ToInt32(r.D2["qty"];

标签: c# sql


【解决方案1】:

这是我们如何减去两个数据表。

DataTable Subtraction_result = newDt.AsEnumerable()
            .Join(newDt1.AsEnumerable(), d1 => d1["batch_num"], d2 => d2["batch_num"], (d1, d2) => new { D1 = d1, D2 = d2 })
            .Select(r =>
            {
                var row = newDt1.NewRow();
                row["batch_num"] = Convert.ToInt32(r.D1["batch_num"]);
                row["qty"] = Convert.ToInt32(r.D2["qty"]) - Convert.ToInt32(r.D1["qty"]);
                return row;
            }).CopyToDataTable();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2019-09-30
    • 2012-07-31
    • 2012-11-18
    • 2012-12-16
    • 2012-09-13
    相关资源
    最近更新 更多