首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Linq进行列求和

使用Linq进行列求和
EN

Stack Overflow用户
提问于 2019-06-10 21:49:54
回答 1查看 83关注 0票数 0

我的要求是合并ID与每个列中的值相同的行,并汇总其数量和百分比列。

Datatable示例如下所示-

代码语言:javascript
复制
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

预期结果-

代码语言:javascript
复制
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语句,我收到了一个类似于下面的输出-

代码语言:javascript
复制
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();
代码语言:javascript
复制
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。

任何建议都会有帮助。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-06-10 21:55:24

只需将所需的列加到查询中即可。

代码语言:javascript
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56533971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档