下面是我的代码,其中我试图将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?
答案 0 :(得分:0)
在Select
上使用PROD 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();