C#学习教程:使用Linq到GroupBy和Sum数据表分享


使用Linq到GroupBy和Sum数据表

嗨,我有一个像这样的数据表:

  Id金额1金额2金额3    1 2 2 2    12 4 6 4    12 6 6 5    22 7 2 1    22 7 2 2 

我需要得到这样的数据表:

  Id金额1金额2金额3    1 2 2 2    12 10 12 9      22 14 4 3 

我最初尝试在匿名方法中执行此操作但我需要将其返回到另一个无法使用匿名方法完成的类。 我的第二次尝试是这样做,所以可以返回:

DataTable ddt = dt.AsEnumerable() .Sum(g => g.Field("Amount 1")) .GroupBy(g => new { Col1 = g["ID"] }) .Select(g => g.OrderBy(r => r["ID"]).First()) .CopyToDataTable(); 

这段代码肯定不会编译,但如果可能的话,任何帮助/建议都会非常感激。 我对linq很新。

您可以首先进行GroupBy ,然后将组投影到DataRow ,然后使用CopyToDataTable扩展创建DataTable

 var newDt = dt.AsEnumerable() .GroupBy(r => r.Field("Id")) .Select(g => { var row = dt.NewRow(); row["Id"] = g.Key; row["Amount 1"] = g.Sum(r => r.Field("Amount 1")); row["Amount 2"] = g.Sum(r => r.Field("Amount 2")); row["Amount 3"] = g.Sum(r => r.Field("Amount 3")); return row; }).CopyToDataTable(); 

你正在使你的电话无序。 下面的代码不会将数据放入表中,但它会为您提供可以轻松放入表中的数据。

 dt.AsEnumberable() .GroupBy(g => g["ID]) .Select(g => new { Id = g.Key, Amount1 = g.Sum(s => s.Amount1), Amount2 = g.Sum(s => s.Amount2), Amount3 = g.Sum(s => s.Amount3)}); 

这对我有用。 如果您有十进制值并使用数据表作为数据表而不是变量,请稍微更改Arturo的代码以帮助解决转换问题。 (注意r [15]是你要求的列)

上述就是C#学习教程:使用Linq到GroupBy和Sum数据表分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

  dt = dt.AsEnumerable() .GroupBy(r => r["fldReportCode"]) .Select(g => { var row = dt.NewRow(); row["fldReportCode"] = g.Key; row[15] = g.Sum(r => (decimal)r[15]); //row["Amount 2"] = g.Sum(r => r.Field("Amount 2")); //row["Amount 3"] = g.Sum(r => r.Field("Amount 3")); return row; }).CopyToDataTable(); 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959809.html

发表评论

邮箱地址不会被公开。 必填项已用*标注