C# DataTable 分组

freecodex 2014-08-11 06:07:09

表(这里是指C#中DataTable这种数据)结构(一共四列,Load Plan#、ID/Style、CBM、KGS)及数据
Load Plan# ID/Style CBM KGS
REF111 54836099 1.500 0.500
REF111 1.500 0.500
54836099 2.000 1.000
54836099 1.500 0.500

期待结果:
Load Plan# ID/Style TotalCBM TotalKGS
REF111 54836099 1.500 0.500
REF111 1.500 0.500
54836099 3.500 1.500

说明:1 按Load Plan# 和 ID/Style 两列分组后,对CBM和KGS两列求和。
2 Load Plan# 和 ID/Style 两列可以有空值,空值和空值被视为相当(第三列和第四列分到一组)。
3 Load Plan# 这个列名中存在空格符(一共10个字符),即Load Plan#(十个字符)不是LoadPlan#(九个字符)。

由于第2个和第3个条件,实现起来总是有些错误。 麻烦大家给个思路,有测试代码更好,谢谢。


...全文
861 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
_小黑_ 2014-08-12
  • 打赏
  • 举报
回复

var q = dt.AsEnumerable().GroupBy(d => new
            {
                LP = d.Field<string>("Load Plan#"),
                si = d.Field<string>("ID/Style")
            }).Select(g => new {lp = g.Key.LP ,
                                si = g.Key.si,
                                cbm = g.Sum(d=> Convert.ToDouble(d["CBM"])),
                                kgs = g.Sum(d=> Convert.ToDouble(d["KGS"]))});
freecodex 2014-08-12
  • 打赏
  • 举报
回复
引用 3 楼 devmiao 的回复:
先对数据进行标准化,然后用groupby分组。
您的意思是指,用System.Linq库中GroupBy方法来处理吧?在问题表述中我指明了两个条件(第二点和第三点),导致C#不能很好的处理这两个问题
freecodex 2014-08-12
  • 打赏
  • 举报
回复
引用 2 楼 smthgdin 的回复:
空值和空值相当是什么意思? 试试linq。
不好意思,这里正确的表述是把空值和空值看作相等,例如: A = ‘’, B = ‘’ (A和B都为空,长度为0) 那么, 测试 A == B,将返回 true
devmiao 2014-08-11
  • 打赏
  • 举报
回复
先对数据进行标准化,然后用groupby分组。
smthgdin_020 2014-08-11
  • 打赏
  • 举报
回复
空值和空值相当是什么意思? 试试linq。
wangnaisheng 2014-08-11
  • 打赏
  • 举报
回复

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧