1. DataTable dt = SQLLayer.Get工作量统计(beginDate, endDate);
  2.             var querySum = from t in dt.AsEnumerable()
  3.                            group t by t.Field<string>("库房")
  4.                                into g
  5.                                select new
  6.                                    {
  7.                                        _库房 = g.Key,
  8.                                        _品次_入库 = g.Sum(=> t.Field<decimal>("品次_入库")),
  9.                                        _品种_入库 = g.Sum(=> t.Field<decimal>("品种_入库")),
  10.                                        _金额_入库 = g.Sum(=> t.Field<decimal>("金额_入库")),
  11.                                        _品次_出库 = g.Sum(=> t.Field<decimal>("品次_出库")),
  12.                                        _品种_出库 = g.Sum(=> t.Field<decimal>("品种_出库")),
  13.                                        _金额_出库 = g.Sum(=> t.Field<decimal>("金额_出库")),
  14.                                        _品种_现存 = g.Sum(=> t.Field<decimal>("品种_现存")),
  15.                                        _金额_现存 = g.Sum(=> t.Field<decimal>("金额_现存"))
  16.                                    };
  17.  
  18.             DataTable newDt = new DataTable();
  19.  
  20.             DataRow newRow = null;
  21.             newDt.Columns.Add("库房", typeof(string));
  22.             newDt.Columns.Add("品次_入库", typeof(decimal));
  23.             newDt.Columns.Add("品种_入库", typeof(decimal));
  24.             newDt.Columns.Add("金额_入库", typeof(decimal));
  25.             newDt.Columns.Add("品次_出库", typeof(decimal));
  26.             newDt.Columns.Add("品种_出库", typeof(decimal));
  27.             newDt.Columns.Add("金额_出库", typeof(decimal));
  28.             newDt.Columns.Add("品种_现存", typeof(decimal));
  29.             newDt.Columns.Add("金额_现存", typeof(decimal));
  30.  
  31.             foreach (var query in querySum)
  32.             {
  33.                 newRow = newDt.NewRow();
  34.                 newRow["库房"] = query._库房;
  35.                 newRow["品次_入库"] = query._品次_入库;
  36.                 newRow["品种_入库"] = query._品种_入库;
  37.                 newRow["金额_入库"] = query._金额_入库;
  38.                 newRow["品次_出库"] = query._品次_出库;
  39.                 newRow["品种_出库"] = query._品种_出库;
  40.                 newRow["金额_出库"] = query._金额_出库;
  41.                 newRow["品种_现存"] = query._品种_现存;
  42.                 newRow["金额_现存"] = query._金额_现存;
  43.                 newDt.Rows.Add(newRow);
  44.  
  45.             }
  1.  
  2.  private void btnLinqTest__Click(object sender, EventArgs e)
  3.         {
  4.             DataTable vtblSeqBase = this.DM.bdsSingle._mpDataTable;
  5.  
  6.             //1. GroupBy 统计
  7. var query =
  8.                from q in vtblSeqBase.AsEnumerable()
  9.                group q by q.Field<string>("MachineType") into r
  10.                select new
  11.                {
  12.                    _qMachType = r.Key,
  13.                    _qCount = r.Count()
  14.                };
  15.  
  16.             using (DataTable vtblCount = new DataTable())
  17.             {
  18.                 DataRow vNewRow = null;
  19.                 vtblCount.Columns.Add("MachType", typeof(string));
  20.                 vtblCount.Columns.Add("Count", typeof(int));
  21.                 foreach (var vq in query)
  22.                 {
  23.                     vNewRow = vtblCount.NewRow();
  24.                     vNewRow["MachType"] = vq._qMachType;
  25.                     vNewRow["Count"] = vq._qCount;
  26.                     vtblCount.Rows.Add(vNewRow);
  27.                 }
  28.                 //vtblCount.mmViewForRD();
  29.             }
  30.  
  31.             //2. Distinct用法       XXXTestOk 2011-07-18
  32.             var d = (from DataRow vRow in vtblSeqBase.Rows
  33.                      select new { _MachType = vRow["MachineType"] }).Distinct();
  34.             using (DataTable vtblDistinct = new DataTable())
  35.             {
  36.                 DataRow vNewRow = null;
  37.                 vtblDistinct.Columns.Add("MachType", typeof(string));
  38.                 vtblDistinct.Columns.Add("Count", typeof(int));
  39.                 foreach (var q in d)
  40.                 {
  41.                     vNewRow = vtblDistinct.NewRow();
  42.                     vNewRow["MachType"] = q._MachType;
  43.                     vtblDistinct.Rows.Add(vNewRow);
  44.                 }
  45.                 //vtblDistinct.mmViewForRD();
  46.             }
  47.  
  48.             //DataTableExtensions.CopyToDataTable
  49.  
  50.             //3.
  51.             List<int> vListNum = new List<int> { 21, 46, 46, 55, 17, 21, 55, 55 };
  52.             IEnumerable<int> vDistNum = vListNum.Distinct();
  53.             foreach (int n in vDistNum)
  54.             {
  55.                 //MessageBox.Show("不重复的数值 =" + n.ToString());
  56.             }
  57.  
  58.             //4. Group By 一个字段
  59.             var querySum =
  60.                 from q in vtblSeqBase.AsEnumerable()
  61.                 group q by q.Field<string>("MachineType") into g
  62.                 select new
  63.                 {
  64.                     _qMachType = g.Key,
  65.                     _qSamTotal = g.Sum(=> q.Field<decimal>("SamValue"))
  66.                 };
  67.  
  68.             using (DataTable vtblSAMTotal  = new DataTable())
  69.             {
  70.                 DataRow vNewRow = null;
  71.                 vtblSAMTotal.Columns.Add("MachType", typeof(string));
  72.                 vtblSAMTotal.Columns.Add("SAMTotal", typeof(decimal));
  73.                 foreach (var vq in querySum)
  74.                 {
  75.                     vNewRow = vtblSAMTotal.NewRow();
  76.                     vNewRow["MachType"] = vq._qMachType;
  77.                     vNewRow["SAMTotal"] = vq._qSamTotal;
  78.                     vtblSAMTotal.Rows.Add(vNewRow);
  79.                 }
  80.                 //vtblSAMTotal.mmViewForRD();
  81.             }
  82.  
  83.             //5. Group By 多个字段 GBN = Group By NField
  84.             var queryGBN  =
  85.                 from q in vtblSeqBase.AsEnumerable()
  86.                 group q by new {机器代码=q.Field<string>("MachineType"), 工序代码=q.Field<string>("SeqCode") }
  87.                 into g
  88.                 select new
  89.                 {
  90.                     _qMachType = g.Key,
  91.                     _qSamTotal = g.Sum(=> q.Field<decimal>("SamValue")),
  92.                     _qSamAvg = g.Average(=> q.Field<decimal>("SamValue"))
  93.                 };
  94.  
  95.             using (DataTable vtblSAMTotal = new DataTable())
  96.             {
  97.                 DataRow vNewRow = null;
  98.                 vtblSAMTotal.Columns.Add("MachType", typeof(string));
  99.                 vtblSAMTotal.Columns.Add("SeqCode", typeof(string));
  100.                 vtblSAMTotal.Columns.Add("SAMTotal", typeof(decimal));
  101.                 vtblSAMTotal.Columns.Add("SAMAvg", typeof(decimal));
  102.                 foreach (var vq in queryGBN)
  103.                 {
  104.                     vNewRow = vtblSAMTotal.NewRow();
  105.                     vNewRow["MachType"] = vq._qMachType;
  106.                     vNewRow["SeqCode"] = vq._qMachType;
  107.                     vNewRow["SAMTotal"] = vq._qSamTotal;
  108.                     vNewRow["SAMAvg"] = vq._qSamAvg;
  109.                     vtblSAMTotal.Rows.Add(vNewRow);
  110.                 }
  111.                 vtblSAMTotal.mmViewForRD();
  112.             }
  113.         }

C# Linq To DataTable 分组统计 DEMO的更多相关文章

  1. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

  2. linq 将datatable分组求和在转datatable

    DataTable dt = new DataTable(); dt.Columns.Add("CustomerID"); dt.Columns.Add("aa" ...

  3. DataTable、List使用groupby进行分组和分组统计;List、DataTable查询筛选方法

    DataTable分组统计: .用两层循环计算,前提条件是数据已经按分组的列排好序的. DataTable dt = new DataTable(); dt.Columns.AddRange(new ...

  4. 如何使用linq操作datatable进行分组

    使用微软.net的孩子们应该都知道linq吧,要知道linq可是其他高级语言没有的技术,比如php,java等等,但是起初我对linq的认识只是停留在对 list<> 的泛型集合进行操作, ...

  5. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  6. (转)C#用Linq实现DataTable的Group by数据统计

    本文转载自:http://www.cnblogs.com/sydeveloper/archive/2013/03/29/2988669.html 1.用两层循环计算,前提条件是数据已经按分组的列排好序 ...

  7. C# Linq及Lamda表达式实战应用之 GroupBy 分组统计

    在项目中做统计图表的时候,需要对查询出来的列表数据进行分组统计,首先想到的是避免频繁去操作数据库可以使用 Linq eg: //例如对列表中的Cu元素进行按年GroupBy分组统计 //包含年份,平均 ...

  8. Dev用于界面按选中列进行分组统计数据源(实用技巧)

    如果有用U8的可以明白这个功能就是模仿他的统计功能.我不过是把他造成通用的与适应于DEV的. (效率为6000条数据分组统计时间为3秒左右分组列过多5秒.1000条以下0.几秒,500条下0.00几秒 ...

  9. XtraGrid使用心得(折叠式主细档、分组统计)

    XtraGrid的关键类就是:GridControl和GridView.GridControl本身不显示数据,数据都是显示在GridView/CardView/XXXXView中.GridContro ...

随机推荐

  1. LLVM在静态分析上的增强 @ WWDC 2013

    在代码还没有真正跑起来的时候,可以利用Clang对代码进行静态分析. 1. 可以应用快捷键Shift+Command+B对项目代码进行分析: 2. 也可以针对某个文件进行分析(现有版本貌似不能针对特定 ...

  2. 操作系统课堂笔记(2)操作系统的硬件环境之I/O技术和时钟

    I/O技术 1.程序控制I/O技术 有处理器提供相关的IO指令来实现的.主要缺陷是,处理器必须关注IO处理单元的状态,因而它会耗费大量的时间轮询以获得这个信息,这严重降低了系统性能. 2.中断驱动I/ ...

  3. DirectoryEntry 活动目录的使用

    public class DirectoryHelper { public static string DomainName = System.Environment.UserDomainName; ...

  4. [Javascript] Adding Shapes to Maps with Leaflet and GeoJSON

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. 回击MLAA:NVIDIA FXAA抗锯齿性能实測、画质对照

    PC游戏玩家肯定会对各式各样的AA抗锯齿技术很熟悉,而今天本文的主角就是NVIDIA今年才推出的新型抗锯齿技术"FXAA". FXAA在某种程度上有些类似于AMD之前宣传的MLAA ...

  6. 阿里技术保障-KeepAlive

    http://blog.sina.cn/dpool/blog/s/blog_e59371cc0102ux5w.html?wm=3049_a111

  7. Error: no `server' JVM at...解决办法 【转】

    出现问题:用java -jar XXX.jar -server -Xms900m -Xmx900m 提示错误Error: no `server' JVM at `C:\Program Files\Ja ...

  8. map的例子

    11.4 编写单词计数程序,忽略大小写和标点.例如,“example.”,“example,"和”Example“应该递增相同的计算器. #include<iostream> # ...

  9. find which process occupy the PORT

    mac :   lsof -i:8080 linux : netstat -anltp | grep 8080

  10. Spring整合JMS(一)——基于ActiveMQ实现

    1.1     JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到 ...