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 ...
随机推荐
- Unity定时器
需求:制作定时器,运行3秒后执行第一次,之后每隔3秒执行一次操作. 1.使用变量在Update中计时 public class TestTimer : MonoBehaviour { private ...
- PowerShell脚本传递参数
在编写PowerShell脚本的时候,可以通过给变量赋值的方法输出想要的结果,但这样的话,需要改动脚本内容.其实也可以在脚本中定义参数,然后再在执行脚本的时候对参数赋值,而无需改动脚本内容. 在Pow ...
- C# - 集合类 - 集合接口
本篇将介绍关于集合的接口 这些接口定义了所有与集合有关的类的框架 IEnumerable接口 ns:System.Collections 此接口定义了对集合遍历的方法 一般表示元素序列或集合的类都实现 ...
- MVC - HtmlHelper类
传统的Html元素不能和服务端数据进行绑定 HtmlHelper类提供了一系列的方法来生成Html元素 并可以实现与数据绑定在一起 然后生成Html Html.BeginForm(actionName ...
- 自己动手,丰衣足食!一大波各式各样的ImageView来袭!
工作略忙,一直想自己打造一个开源控件却苦于没有时间,可是这种事情如果不动手就会一直拖下去,于是最近抽时间做了个简单的自定义形状的ImageView控件. 时间紧迫,目前仅支持正六边形.圆形.菱形.椭圆 ...
- 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * from A ...
- iOS 网络编程:AFNetworking
1 简介 1.1 概念 AFNetworking网络框架并不是IOS自带的框架,而是第三方的开源框架.它是对NSURLConnection和NSURLSession API的封装,但是目前AFNetw ...
- oracle EBS 基于Host并发程序的开发(转)
参考此编文章 http://www.doc88.com/p-0972680953307.html http://www.cnblogs.com/benio/archive/2011/06/10/207 ...
- .net+easyui--combobox
一:预定义结构的 select 元素创建组合框(combobox)值固定写死 <select class="easyui-combobox" name="state ...
- html和css 基础梳理之一
原图出处:http://www.cnblogs.com/jiasongmao/archive/2016/08/24/5804298.html