【问题标题】:Copy specific rows from One DataTable to another DataTable using LINQ使用 LINQ 将特定行从一个 DataTable 复制到另一个 DataTable
【发布时间】:2018-07-20 03:58:07
【问题描述】:

下面是我的代码,我在其中尝试将 3 列“BATCH NUM”、“QTY”和“PROD ID”从一个复制到另一个。问题是复制了“BATCH NUM”、“QTY”,但没有复制“PROD ID”列。

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

                  row["BATCH NUM"] = g.Key;
                  row["QTY"] = g.Sum(r => Convert.ToInt32(r.Field<string>("QTY")) + Convert.ToInt32(r.Field<string>("BONUS")));
                  row["PROD ID"] = g.Select(r => r.Field<string>("PROD ID"));
                  return row;
              }).CopyToDataTable();

如何将“PROD ID”复制到 DataTable?

【问题讨论】:

    标签: c# .net linq datatable


    【解决方案1】:

    PROD ID 上使用Select 意味着您正在尝试将字符串集合存储在支持存储字符串值的列中。这将默认调用集合上的 ToString 方法,并导致 System.Linq... 列中的字符串值。

    您想使用适当的函数来获取列中的所有值:

    var newDt = dt.AsEnumerable()
                  .GroupBy(r => r.Field<string>("BATCH NUM"))
                  .Select(g =>
                  {
                      var row = dt.NewRow();
    
                      row["BATCH NUM"] = g.Key;
                      row["QTY"] = g.Sum(r => Convert.ToInt32(r.Field<string>("QTY")) + Convert.ToInt32(r.Field<string>("BONUS")));
                      row["PROD ID"] = String.Join(",", g.Select(x => x.Field<string>("PROD ID")).Distinct());
                      return row;
                  }).CopyToDataTable();
    

    【讨论】:

    • 我正在根据“BATCH NUM”对行进行分组,所以我只想获取那些 PROD ID 的值。
    • @JahanzaibNiazi 在字符串列中,您只能放置字符串值而不是字符串集合。您可以改为使用 string.join 来获取所有产品 ID。查看我更新的代码。
    • 我只想获取按 BATCH NUM 分组的 PROD Id 值。那么我应该使用哪个功能呢?
    • 我已经尝试过您的代码,但它没有将 PROD ID 列复制到 DataTable
    • 是的,我已经尝试过您编辑的代码,但它没有将 PROD ID 列复制到数据表中
    猜你喜欢
    • 2013-08-26
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2019-11-12
    相关资源
    最近更新 更多