首页 > 解决方案 > 使用 LINQ 将特定行从一个 DataTable 复制到另一个 DataTable

问题描述

下面是我试图将 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#.netlinqdatatable

解决方案


使用SelectonPROD ID表示您尝试将字符串集合存储在支持存储字符串值的列中。这将默认调用集合上的 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();

在此处输入图像描述


推荐阅读