DataTable行分组,并sum求和
两种方式:
第一种,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求和的更多相关文章
- 从sum()求和引发的思考
sum()求和是一个非常简单的函数,以前我的写法是这样,我想大部分和我一样刚开始学习JS的同学写出来的也会是这样. function sum() { var total=null; for(var i ...
- C#中DataTable行转列示例
将下面表(1)格式的数据转换为表(2)格式的数据.很明显,这是一个行转列的要求,本想在数据库中行转列,因为在数据库中行转列是比较简单的,方法可以参考本站SQLServer中(行列转换)行转列及列转行且 ...
- 如何使用linq操作datatable进行分组
使用微软.net的孩子们应该都知道linq吧,要知道linq可是其他高级语言没有的技术,比如php,java等等,但是起初我对linq的认识只是停留在对 list<> 的泛型集合进行操作, ...
- c# DataTable行转列
/// <summary> /// datatable行转列 /// </summary> /// <param name="dtSrc">来源 ...
- postgresql高级应用之行转列&汇总求和
postgresql高级应用之行转列&汇总求和 轉載請注名出處 https://www.cnblogs.com/funnyzpc/p/14732165.html 前言 节前公司业务方需要做一個 ...
- RDLC报表系列--------行分组报表
报表分组开发步骤: 先看总体效果:如图 下面就做个看看... 1.先将数据处理成如下结构 如图 2.创建数据集DataSet.xsd,创建表->右键选择添加数据表->添加行(ctrl+L ...
- DataTable行转列
/// <summary> /// DataTable行转列 /// </summary> /// <param name="dtable">需 ...
- RDLC报表系列(二) 行分组
接上一篇文章的内容,今天来说的是行分组.还是打开demo1.rdlc界面,拖入一个文本框和表 1.在表中随便选择一个字段,不然在添加行组的时候不会自动提示.我这里是选择的Dept 2.在下面的行组中右 ...
- sum() 求和用法
def func(*args): # sum = 0 # for el in args: # sum += el # return sum return sum(args) # sum() 求和 de ...
随机推荐
- 团队第七次 # scrum meeting
github 本此会议项目由PM召开,召开时间为4-11日晚上9点,以大家在群里讨论为主 召开时长10分钟 任务表格 袁勤 负责协调前后端 https://github.com/buaa-2016/p ...
- Webdriver+Testng实现测试用例失败自动截图功能
testng执行测试用例的时候,如果用例执行失败会自动截图,方便后续排查问题 1.首先定义一个截图类: package com.rrx.utils; import java.io.File;impor ...
- Postman A请求的返回值作为B请求的入参( 之‘’token‘’ ,用代码设置全局变量)
问题: 登陆接口获取token,其他接口访问时需携带token 方案: 在登陆接口访问后设置Postman的全局变量(Globals),例如设置环境变量名:token2,值(实时的不用自己手动设置的) ...
- Centos7上安装mariadb
一.查看系统是否安装了mariadb,有的话就删除掉. 1.rpm -qa | grep mariadb 2.rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86 ...
- 提取和匹配线特征的一个demo
一.代码来源: https://github.com/drozdvadym/opencv_line_descriptor 二.依赖包:OpenCV 2.4.9 三.Matching的运行结果截图: 四 ...
- 5.1HTML+CSS制作一颗流星
效果地址:https://codepen.io/flyingliao/pen/QPKQjB?editors=1100 效果图: HTML code: <div class="sky&q ...
- 6.2 集合和映射--集合Set->底层基于链表实现
在6.1中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的. 1.集合set相关功能 1.1 add()的不同 用于链表本身没有去重的效果,因此 ...
- 判断IOS、Android访问
/*判断手机访问是Android还是IOS*/ $user_agent = $_SERVER['HTTP_USER_AGENT']; if(stripos($user_agent, "iPh ...
- 开源微信管家平台——JeeWx 捷微4.0 微服务版本发布,全新架构,全新UI,提供强大的图文编辑器
JeeWx捷微4.0 微服务版本发布^_^ 换代产品(全新架构,全新UI,提供强大的图文编辑器) JEEWX 从4.0版本开始,技术架构全新换代,采用微服务架构,插件式开发,每个业务模块都是独立的 ...
- 触摸事件,手势识别(UITouch,UIGestureRecognizer)
触摸发生时,UIWindow会有一个队列来存放所有的触摸事件,然后再把这些事件发送给对应的hit-test view,hit-test view会通过touch的四个函数来接收这些事件. 四个函数分别 ...