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 ...
随机推荐
- Java中的升序和降序
package ah; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; impo ...
- 通过ClickOnce本地打包发布WPF应用程序
环境: 1)VS 2015 Windows10 x64 .net framework 4.5.2 要点: 1)安装模式和设置选择可以脱机使用. 2)系统必备组件中安装位置选择与应用程序相同位置下载系 ...
- pinyin.js
export default { a: "\u554a\u963f\u9515", ai: "\u57c3\u6328\u54ce\u5509\u54c0\u7691\u ...
- js动态添加、删除行
<meta charset="utf-8"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transiti ...
- Maven 下添加oracle11g的包 报Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0
Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0 原因:Oracle 的ojdbc.jar是收费的,所以maven的中央仓库中没有这个资源,只能通过配 ...
- tp5邮件发送
一.开启SMTP服务(使用php发送邮件需要用到SMTP服务,这里以163邮箱的SMTP服务为例) 1.登录163邮箱,在首页上找到“设置”. 2.选择开启的服务,一般都全选,POP3/SMTP/IM ...
- 《python编程快速上手》
第一部分 编程基础 @表达式 ** % // @ >>> int(3.4) 3 >>>round(3.555,2)3.56 @判断条件时:0和0.0和‘’都是Fal ...
- Swift用户通知授权
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIAppli ...
- 比较C#中几种常见的复制字节数组方法的效率
在日常编程过程中,我们可能经常需要Copy各种数组,一般来说有以下几种常见的方法:Array.Copy,IList<T>.Copy,BinaryReader.ReadBytes,Buffe ...
- 软件工程个人作业四--alpha阶段个人总结
个人总结 (1)个人总结 类型 具体技能和面试问题 现在的回答 毕业找工作的时间 语言 最拿手的计算机语言之一,代码量多少 C语言相对熟悉一点 软件实现 你有没有在别的代码的基础上改进,你是怎么读懂别 ...