C# Linq To DataTable 分組統計


 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> {  2146465517215555 };
            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();
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM