两种方式:

第一种,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. Android View添加删除或隐藏显示的默认动画;

    代码中给控件设置Visibility ? VISIBLE : GONE ;时太生硬,用户体验不好:设置一个Android ViewGroup的默认动画很实用: 给需要添加动画的控件或布局的父布局,记住 ...

  2. java工具类——java将一串数据按照gzip方式压缩和解压缩

    我要整理在工作中用到的工具类分享出来,也方便自己以后查阅使用,这些工具类都是我自己实际工作中使用的 import java.io.ByteArrayInputStream; import java.i ...

  3. 使用gitblit搭建git服务器

    前言 一直在学习新技术,我想都整理到博客上.公司还在坚持用svn,之前学过git都快要忘记了,此篇博客记录搭建基于gitblit的git服务器.当然直接使用linux也可以,不过我不是很熟悉,考虑到我 ...

  4. Thinkphp整合阿里云OSS图片上传实例

    Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...

  5. 列表推导式和sum的用法

    作者:杨航锋链接:https://www.zhihu.com/question/57470958/answer/153405326来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  6. 基于HALCON的模板匹配方法总结

    注:很抱歉,忘记从转载链接了,作者莫怪.... 基于HALCON的模板匹配方法总结 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多 ...

  7. linux虚拟机长时间不用时间改回来的方法

    1. 时间和时区 地理课上我们都学过格林威治时间(GMT), 它也就是0时区时间,但是我们在计算机中经常看到的是UTC,它是Coordinated Universal Time的简写, 虽然可以认为U ...

  8. Django ORM queryset object 解释(子查询和join连表查询的结果)

    #下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) --- ...

  9. OJ每日一练试水第1天,聊聊输入输出问题

    目录 多组输入 第一题 多组冒泡排序 (难度2颗星版本) (难度3颗星版本) (难度4颗星版本) scanf返回值 时间:2019.4.26 @( 每日一练01) 先借鉴一下ACM的输入格式 OJ题中 ...

  10. Delphi Sysem.JSON 链式写法(转全能中间件)

    链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...