两种方式:

第一种,Linq

void Main()
{
var dt=new DataTable();
dt.Columns.Add("medicID");
dt.Columns.Add("price");
dt.Columns.Add("num",typeof(int));
dt.Columns.Add("unit");
dt.Rows.Add("0001","1.2",10,"盒");
dt.Rows.Add("0001","1.2",15,"盒");
dt.Rows.Add("0002","14",15,"支");
dt.Rows.Add("0003","10",10,"盒");
dt.Rows.Add("0002","14",10,"盒"); var query=dt.AsEnumerable()
.GroupBy(d=>new {medicID=d.Field<string>("medicID"),price=d.Field<string>("price"),unit=d.Field<string>("unit")})
.Select(g=>new{
medicID=g.Key.medicID,
price=g.Key.price,
num=g.Sum(d=>d.Field<int>("num")),
unit=g.Key.unit
}); }

  

第二种,Datatable

        public DataTable dtgourpsum(DataTable dt) {
//初始化列
DataRow[] rows = dt.Select(null, "ProductCode");
int length = rows.Length;
string ProductCode = null;
for (int i = dt.Rows.Count - ; i >= ; i--)
{
//DataRow row = rows[i];
if (dt.Rows[i]["ProductCode"].ToString() != ProductCode)//如果1个列中有不同的,则为新的分组,重新记录1个列的值到临时变量
{
ProductCode = dt.Rows[i]["ProductCode"].ToString();
}
else
{
dt.Rows[i]["OerderNumber"] = Convert.ToInt32(dt.Rows[i + ]["OerderNumber"].ToString()) + Convert.ToInt32(dt.Rows[i]["OerderNumber"].ToString());//将上一个行的OerderNumber列和当前行的OerderNumber相加,记录到当前行中。
dt.Rows.RemoveAt(i+);//将上一行从原来的DataTable中移除。
}
}
return dt;
}

最快的做法不是Linq,而是先排序后相加并删除后面相同的行来处理,Linq在这里将非常低效,推荐使用第二种方法。

转自CSDN,原文链接:https://bbs.csdn.net/topics/390063982

DataTable行分组,并sum求和的更多相关文章

  1. 从sum()求和引发的思考

    sum()求和是一个非常简单的函数,以前我的写法是这样,我想大部分和我一样刚开始学习JS的同学写出来的也会是这样. function sum() { var total=null; for(var i ...

  2. C#中DataTable行转列示例

    将下面表(1)格式的数据转换为表(2)格式的数据.很明显,这是一个行转列的要求,本想在数据库中行转列,因为在数据库中行转列是比较简单的,方法可以参考本站SQLServer中(行列转换)行转列及列转行且 ...

  3. 如何使用linq操作datatable进行分组

    使用微软.net的孩子们应该都知道linq吧,要知道linq可是其他高级语言没有的技术,比如php,java等等,但是起初我对linq的认识只是停留在对 list<> 的泛型集合进行操作, ...

  4. c# DataTable行转列

    /// <summary> /// datatable行转列 /// </summary> /// <param name="dtSrc">来源 ...

  5. postgresql高级应用之行转列&汇总求和

    postgresql高级应用之行转列&汇总求和 轉載請注名出處 https://www.cnblogs.com/funnyzpc/p/14732165.html 前言 节前公司业务方需要做一個 ...

  6. RDLC报表系列--------行分组报表

    报表分组开发步骤: 先看总体效果:如图 下面就做个看看... 1.先将数据处理成如下结构 如图 2.创建数据集DataSet.xsd,创建表->右键选择添加数据表->添加行(ctrl+L ...

  7. DataTable行转列

    /// <summary> /// DataTable行转列 /// </summary> /// <param name="dtable">需 ...

  8. RDLC报表系列(二) 行分组

    接上一篇文章的内容,今天来说的是行分组.还是打开demo1.rdlc界面,拖入一个文本框和表 1.在表中随便选择一个字段,不然在添加行组的时候不会自动提示.我这里是选择的Dept 2.在下面的行组中右 ...

  9. sum() 求和用法

    def func(*args): # sum = 0 # for el in args: # sum += el # return sum return sum(args) # sum() 求和 de ...

随机推荐

  1. PHP URL安全的Base64位编码

    先将内容编码成Base64结果; 将结果中的加号”+”替换成中划线“-“; 将结果中的斜杠”/”替换成下划线”_”; 将结果中尾部的“=”号全部保留; 实现 编码 function urlsafe_b ...

  2. JS 实现兼容浏览器报警提示声音

    <!DOCTYPE HTML> <head> <title>JS实现报警提示音</title> <meta http-equiv="co ...

  3. zuul ci

    . ├── a_module ├── b_module ├── lib ├── zuul │   ├── check │   ├── ci │   ├── gate │   ├── layout.ya ...

  4. bits change world

    No code is the best way to write secure and reliable applications. Write nothing; deploy nowhere.

  5. python3下调用系统massagebox对话框

    #python3下调用系统massagebox对话框#先安装pwin32插件https://github.com/mhammond/pywin32/releases import win32apiim ...

  6. 李清华201772020113《面向对象程序设计(java)》第十一周学习总结

    实验十一   集合 实验时间 2018-11-8 1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: (2) 了解java集合框架体系组成: (3) ...

  7. nodeJs 操作Mysql数据库

    nodeJs下操作数据库需要安装npm模块: mysql npm install mysql --save-dev 新建express项目 express --view=ejs 在项目根目录下新建数据 ...

  8. sql server 新语法 收藏

    1.行转列 PIVOT函数,行转列,列转换UNPIVOT select * from ShoppingCart as C PIVOT(count(TotalPrice) FOR [Week] IN([ ...

  9. js:基于原生js的上啦下啦刷新功能

    链接:https://www.jianshu.com/p/a8392115e6f0演示地址:http://wonghan.cn/iscroll-demo/html:<body> <d ...

  10. 在Ubuntu上升级SQLite,并让Python使用新版SQLite

    (本文适用于Debian系的Linux,如Ubuntu.Raspbian等等.) 在Linux上,Python的sqlite3模块使用系统自带的SQLite引擎,然而系统自带的SQLite可能版本太老 ...