我的要求是合并ID与每个列中的值相同的行,并汇总其数量和百分比列。
Datatable示例如下所示-
Datatable (dtrec)
COL1 COL2 COL3 ID AMT PERCENTAGE COL4
-----------------------------------------------------
2022 2024 2021 5001 400 .20 213
2022 2024 2021 5001 400 .20
2031 2021 2134 6001 500 .20预期结果-
Desired Output - Datatable (dtrec)
COL1 COL2 COL3 ID AMT PERCENTAGE COL4
-----------------------------------------------------
2022 2024 2021 5001 800 .40 213
2031 2021 2134 6001 500 .20通过使用bellow linq语句,我收到了一个类似于下面的输出-
DataTable dt = dtrec.AsEnumerable()
.GroupBy(r => r.Field<decimal>("ID"))
.Select(g =>
{
var row = dtrec.NewRow();
row["ID"] = g.Key;
row["AMT"] = g.Sum(r => r.Field<decimal>("AMT"));
row["PERCENTAGE"] = g.Sum(r => r.Field<decimal>("PERCENTAGE"));
return row;
}).CopyToDataTable();Datatable (dt)
COL1 COL2 COL3 ID AMT PERCENTAGE COL4
-----------------------------------------------------
5001 800 .40
6001 500 .20 如前所述,我的要求是,是一个linq语句,它将从datatable中选择所有列,另外,它将对AMT和百分比列进行总结。如所需的结果所示。
需要考虑的另一点是,除了ID、AMT和百分比列之外,其他列都是动态的,即列可能增加或减少(例如,COL1、COL2、COL3、COL4、COl5.因此,我们不能在select语句中包含COL1或COL4。
任何建议都会有帮助。
谢谢
发布于 2019-06-10 21:55:24
只需将所需的列加到查询中即可。
DataTable dt = dtrec.AsEnumerable()
.GroupBy(r => r.Field<decimal>("ID"))
.Select(g =>
{
var row = dtrec.NewRow();
row["COL1"] = g.Sum(r => r.Field<decimal>("COL1"));
row["ID"] = g.Key;
row["AMT"] = g.Sum(r => r.Field<decimal>("AMT"));
row["PERCENTAGE"] = g.Sum(r => r.Field<decimal>("PERCENTAGE"));
row["COL4"] = g.Sum(r => r.Field<decimal>("COL4"));
return row;
}).CopyToDataTable();https://stackoverflow.com/questions/56533971
复制相似问题