[C#技術] DataSet(DataTable)輕松的通過Sum、Aver、Count等統計出相關結果


我們在使用Sql ******這些數據庫時,可以輕松的通過Sum、Aver、Count等統計出相關結果,那么,在已經把數據檢索出來的DataSet(DataTable)中呢?特別是通過Web Service獲得了DataSet,這個時候,可是沒有辦法回頭去修改Select語句來獲取這些統計了。那么在DataSet/DataTable中是否可以進行統計呢?答案是肯定的。  

  在MSDN中,有一篇MS推薦的統計方法,就是逐行對數據進行求和統計,這個方法,其實有等於無(或許這個方法只是針對於DataGrid求取小計用吧),因為這個方法中采用的是DataGrid的ItemDataBind事件來對數據進行累加,同我們手動寫代碼統計沒有什么區別。  
   
  本文介紹一個簡單的方法,不需要逐條記錄進行計算就可以輕松的獲得DataTable中的記錄統計結果。這個簡單的方法就是調用功能強大的DataTable的函數Compute。
   
  一、調用說明(僅以C#為例,下同):  
   
  public object Compute(string strExpression,stringstrFilter)  
   
  參數:  
   
  strExpression:要計算的表達式字符串,基本上類似於Sql ******中的統計表達式  
   
  strFilter:統計的過濾字符串,只有滿足這個過濾條件的記錄才會被統計  
   
  二、調用舉例:  
   
  以下示例,假設一個產品銷售表table,描述某商場中各促銷員銷售的實際記錄,包含字段為:姓名(Name)、性別(***,0為女,1為男)、生日(Birthday)、銷售產品的代碼(ProID)、銷售的數量(Quantity)、銷售價格(Price)。  
   
  1.統計所有性別為女的銷售員的數量:  
  table.Compute("Count(*)","***=0");
   
  2.統計所有銷售員中年齡大於20歲的  
  table.Compute("Count(*)","Birthday<’"+today);//today為今天的日期字符串  
   
  3.統計銷售產品的平均價格  
  table.Compute("Aver(Price)","true");
   
  4.統計產品代碼為1的產品銷售數量:  
  table.Compute("Sum(Quantity)","ProID=1");
   
  5.統計所有產品的銷售總金額:  
  要統計總銷售金額,由於table中不存在某項產品某個促銷員銷售的金額數據,但我們可以通過Quantity*Price來獲得。比如:  
  table.Compute("Sum(Quantity*Price)","true");
   
  這里一個問題是:DataTable的統計功能沒有Sql******強,這個統計是錯誤的,因為Compute的統計不具備Sum(Quantity*Price)這樣數據的功能。那怎么辦呢?  
   
  對於這樣復雜數據的統計,我們可以在DataTable中創建一個新的字段來完成,比如Amount,同時設置該字段的Expression為Quantity*Price,這樣我們就可以使用統計功能了:  
  table.Compute("Sum(Amount)","true");   
=============================================================

 

試用實例:    this.lblprice.Text=ds.Tables[0].Compute("Sum(price)","true").ToString();


免責聲明!

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



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