C# Linq To DataTable 分组统计 DEMO
- DataTable dt = SQLLayer.Get工作量统计(beginDate, endDate);
- var querySum = from t in dt.AsEnumerable()
- group t by t.Field<string>("库房")
- into g
- select new
- {
- _库房 = g.Key,
- _品次_入库 = g.Sum(t => t.Field<decimal>("品次_入库")),
- _品种_入库 = g.Sum(t => t.Field<decimal>("品种_入库")),
- _金额_入库 = g.Sum(t => t.Field<decimal>("金额_入库")),
- _品次_出库 = g.Sum(t => t.Field<decimal>("品次_出库")),
- _品种_出库 = g.Sum(t => t.Field<decimal>("品种_出库")),
- _金额_出库 = g.Sum(t => t.Field<decimal>("金额_出库")),
- _品种_现存 = g.Sum(t => t.Field<decimal>("品种_现存")),
- _金额_现存 = g.Sum(t => t.Field<decimal>("金额_现存"))
- };
- DataTable newDt = new DataTable();
- DataRow newRow = null;
- newDt.Columns.Add("库房", typeof(string));
- newDt.Columns.Add("品次_入库", typeof(decimal));
- newDt.Columns.Add("品种_入库", typeof(decimal));
- newDt.Columns.Add("金额_入库", typeof(decimal));
- newDt.Columns.Add("品次_出库", typeof(decimal));
- newDt.Columns.Add("品种_出库", typeof(decimal));
- newDt.Columns.Add("金额_出库", typeof(decimal));
- newDt.Columns.Add("品种_现存", typeof(decimal));
- newDt.Columns.Add("金额_现存", typeof(decimal));
- foreach (var query in querySum)
- {
- newRow = newDt.NewRow();
- newRow["库房"] = query._库房;
- newRow["品次_入库"] = query._品次_入库;
- newRow["品种_入库"] = query._品种_入库;
- newRow["金额_入库"] = query._金额_入库;
- newRow["品次_出库"] = query._品次_出库;
- newRow["品种_出库"] = query._品种_出库;
- newRow["金额_出库"] = query._金额_出库;
- newRow["品种_现存"] = query._品种_现存;
- newRow["金额_现存"] = query._金额_现存;
- newDt.Rows.Add(newRow);
- }
- private void btnLinqTest__Click(object sender, EventArgs e)
- {
- DataTable vtblSeqBase = this.DM.bdsSingle._mpDataTable;
- //1. GroupBy 统计
- var query =
- from q in vtblSeqBase.AsEnumerable()
- group q by q.Field<string>("MachineType") into r
- select new
- {
- _qMachType = r.Key,
- _qCount = r.Count()
- };
- using (DataTable vtblCount = new DataTable())
- {
- DataRow vNewRow = null;
- vtblCount.Columns.Add("MachType", typeof(string));
- vtblCount.Columns.Add("Count", typeof(int));
- foreach (var vq in query)
- {
- vNewRow = vtblCount.NewRow();
- vNewRow["MachType"] = vq._qMachType;
- vNewRow["Count"] = vq._qCount;
- vtblCount.Rows.Add(vNewRow);
- }
- //vtblCount.mmViewForRD();
- }
- //2. Distinct用法 XXXTestOk 2011-07-18
- var d = (from DataRow vRow in vtblSeqBase.Rows
- select new { _MachType = vRow["MachineType"] }).Distinct();
- using (DataTable vtblDistinct = new DataTable())
- {
- DataRow vNewRow = null;
- vtblDistinct.Columns.Add("MachType", typeof(string));
- vtblDistinct.Columns.Add("Count", typeof(int));
- foreach (var q in d)
- {
- vNewRow = vtblDistinct.NewRow();
- vNewRow["MachType"] = q._MachType;
- vtblDistinct.Rows.Add(vNewRow);
- }
- //vtblDistinct.mmViewForRD();
- }
- //DataTableExtensions.CopyToDataTable
- //3.
- List<int> vListNum = new List<int> { 21, 46, 46, 55, 17, 21, 55, 55 };
- IEnumerable<int> vDistNum = vListNum.Distinct();
- foreach (int n in vDistNum)
- {
- //MessageBox.Show("不重复的数值 =" + n.ToString());
- }
- //4. Group By 一个字段
- var querySum =
- from q in vtblSeqBase.AsEnumerable()
- group q by q.Field<string>("MachineType") into g
- select new
- {
- _qMachType = g.Key,
- _qSamTotal = g.Sum(q => q.Field<decimal>("SamValue"))
- };
- using (DataTable vtblSAMTotal = new DataTable())
- {
- DataRow vNewRow = null;
- vtblSAMTotal.Columns.Add("MachType", typeof(string));
- vtblSAMTotal.Columns.Add("SAMTotal", typeof(decimal));
- foreach (var vq in querySum)
- {
- vNewRow = vtblSAMTotal.NewRow();
- vNewRow["MachType"] = vq._qMachType;
- vNewRow["SAMTotal"] = vq._qSamTotal;
- vtblSAMTotal.Rows.Add(vNewRow);
- }
- //vtblSAMTotal.mmViewForRD();
- }
- //5. Group By 多个字段 GBN = Group By NField
- var queryGBN =
- from q in vtblSeqBase.AsEnumerable()
- group q by new {机器代码=q.Field<string>("MachineType"), 工序代码=q.Field<string>("SeqCode") }
- into g
- select new
- {
- _qMachType = g.Key,
- _qSamTotal = g.Sum(q => q.Field<decimal>("SamValue")),
- _qSamAvg = g.Average(q => q.Field<decimal>("SamValue"))
- };
- using (DataTable vtblSAMTotal = new DataTable())
- {
- DataRow vNewRow = null;
- vtblSAMTotal.Columns.Add("MachType", typeof(string));
- vtblSAMTotal.Columns.Add("SeqCode", typeof(string));
- vtblSAMTotal.Columns.Add("SAMTotal", typeof(decimal));
- vtblSAMTotal.Columns.Add("SAMAvg", typeof(decimal));
- foreach (var vq in queryGBN)
- {
- vNewRow = vtblSAMTotal.NewRow();
- vNewRow["MachType"] = vq._qMachType;
- vNewRow["SeqCode"] = vq._qMachType;
- vNewRow["SAMTotal"] = vq._qSamTotal;
- vNewRow["SAMAvg"] = vq._qSamAvg;
- vtblSAMTotal.Rows.Add(vNewRow);
- }
- vtblSAMTotal.mmViewForRD();
- }
- }
C# Linq To DataTable 分组统计 DEMO的更多相关文章
- 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码
2013-9-15 1. CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...
- linq 将datatable分组求和在转datatable
DataTable dt = new DataTable(); dt.Columns.Add("CustomerID"); dt.Columns.Add("aa" ...
- DataTable、List使用groupby进行分组和分组统计;List、DataTable查询筛选方法
DataTable分组统计: .用两层循环计算,前提条件是数据已经按分组的列排好序的. DataTable dt = new DataTable(); dt.Columns.AddRange(new ...
- 如何使用linq操作datatable进行分组
使用微软.net的孩子们应该都知道linq吧,要知道linq可是其他高级语言没有的技术,比如php,java等等,但是起初我对linq的认识只是停留在对 list<> 的泛型集合进行操作, ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- (转)C#用Linq实现DataTable的Group by数据统计
本文转载自:http://www.cnblogs.com/sydeveloper/archive/2013/03/29/2988669.html 1.用两层循环计算,前提条件是数据已经按分组的列排好序 ...
- C# Linq及Lamda表达式实战应用之 GroupBy 分组统计
在项目中做统计图表的时候,需要对查询出来的列表数据进行分组统计,首先想到的是避免频繁去操作数据库可以使用 Linq eg: //例如对列表中的Cu元素进行按年GroupBy分组统计 //包含年份,平均 ...
- Dev用于界面按选中列进行分组统计数据源(实用技巧)
如果有用U8的可以明白这个功能就是模仿他的统计功能.我不过是把他造成通用的与适应于DEV的. (效率为6000条数据分组统计时间为3秒左右分组列过多5秒.1000条以下0.几秒,500条下0.00几秒 ...
- XtraGrid使用心得(折叠式主细档、分组统计)
XtraGrid的关键类就是:GridControl和GridView.GridControl本身不显示数据,数据都是显示在GridView/CardView/XXXXView中.GridContro ...
随机推荐
- LLVM在静态分析上的增强 @ WWDC 2013
在代码还没有真正跑起来的时候,可以利用Clang对代码进行静态分析. 1. 可以应用快捷键Shift+Command+B对项目代码进行分析: 2. 也可以针对某个文件进行分析(现有版本貌似不能针对特定 ...
- 操作系统课堂笔记(2)操作系统的硬件环境之I/O技术和时钟
I/O技术 1.程序控制I/O技术 有处理器提供相关的IO指令来实现的.主要缺陷是,处理器必须关注IO处理单元的状态,因而它会耗费大量的时间轮询以获得这个信息,这严重降低了系统性能. 2.中断驱动I/ ...
- DirectoryEntry 活动目录的使用
public class DirectoryHelper { public static string DomainName = System.Environment.UserDomainName; ...
- [Javascript] Adding Shapes to Maps with Leaflet and GeoJSON
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 回击MLAA:NVIDIA FXAA抗锯齿性能实測、画质对照
PC游戏玩家肯定会对各式各样的AA抗锯齿技术很熟悉,而今天本文的主角就是NVIDIA今年才推出的新型抗锯齿技术"FXAA". FXAA在某种程度上有些类似于AMD之前宣传的MLAA ...
- 阿里技术保障-KeepAlive
http://blog.sina.cn/dpool/blog/s/blog_e59371cc0102ux5w.html?wm=3049_a111
- Error: no `server' JVM at...解决办法 【转】
出现问题:用java -jar XXX.jar -server -Xms900m -Xmx900m 提示错误Error: no `server' JVM at `C:\Program Files\Ja ...
- map的例子
11.4 编写单词计数程序,忽略大小写和标点.例如,“example.”,“example,"和”Example“应该递增相同的计算器. #include<iostream> # ...
- find which process occupy the PORT
mac : lsof -i:8080 linux : netstat -anltp | grep 8080
- Spring整合JMS(一)——基于ActiveMQ实现
1.1 JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到 ...