DataTable.Compute的功能

來源:互聯網
上載者:User

 

DataTable.Compute的功能

1:彙總函式”Sum()”

2:自由計算運算式“20*30+1”

3:bool運算式“1=2”

4:IFF邏輯運算式” IIF(20>1000, 0, 1)” //還支援IsNull,Trim,SubString等

一個小應用:讓DataTable類比Excel的Formula功能。

Excel中的Formula功能強大,如果能讓DataTable有類似的功能就好了。大部分事件DataTable只是用作資料載體,其實很少用它做計算。DataTable提供的函數Compute就提供了功能強大的計算功能。

Compute函數的參數就兩個:Expression,和Filter。

Expresstion是計算運算式,關於Expression的詳細內容請看這裡“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”。而Filter則是條件過濾器,類似sql的Where條件。

1: 這裡詳細介紹的就是Expresstion

先看最簡單的用法,使用彙總函式。這個彙總函式就是報表或者Excel中常用的函數,比如Sum,Avg等等。對於資料列,Datatable可以方便的進行計算,比如DataTable.Cumpute(“Sum(列1)”,”列1>0”); 對於簡單的統計功能,這些函數就足夠用了。(其他提供的函數有min,max,count,求方差,標準差等等)。這個功能常用,倒也不奇怪。

再看“自由運算式”計算。把數學計算運算式寫成字串,然後直接投入ComputeFunction Compute,就可以得到計算結果。這樣,動態產生的計算運算式就可以計算出來了。比方說要計算“列1×30+20+2”或者是純粹的數學計算。

出了計算出具體的結果,Compute函數還能進行邏輯計算。比方說這個運算式就能返回false:Compute(“1=2”,”true”); 這個的用法可能想上邊的情形差不多,在自由組裝一些條件的時候可以得到結果。

在Excel中,還經常用到的就是LogicTest功能了,可以指定一些邏輯運算式,比如這樣的:“IF(20>1000, 0, 1)”。而這個功能要是放到DataTable中該如何?呢?也是用Compute,這樣寫就可以了:“IIF(20>1000, 0, 1)”。

在DataTable裡面如果實現“IF(C102=0,0,C105/C102*30)”就用上邊的這些技術點就可以了。

2:至於第二個參數Filter,就是一個簡單的查詢條件。比如,”true”, “Id>4”, “Name like ’%nd’ and sex=’male’”.

條件不可能很複雜,這些已經比較夠用了。

以前用過的Marge什麼的也不錯,還可以作內串連,在資料量小,需要簡單計算的情況下,這些功能很有用。

當然,如果邏輯極其複雜,DT的這點功能就不夠了,還是得自己寫邏輯(即使要實現“IF(C102=0,0,C105/C102*30)”,也是要自己寫一點處理邏輯的,不過比較通用,寫一次就好了)。

----------------------------------

DataTable.Compute 方法  

計算用來傳遞篩選條件的當前行上的給定運算式

public Object Compute (     string expression,     string filter )

執行個體:
        string sConnectionString; //聲明一個字串
        //串連資料庫字串,串連到XBMIS資料庫,使用者名稱是sa
        sConnectionString = " Data Source=.;Initial Catalog=XBMIS;User ID=sa; ";
        //建立SqlConnection資料庫連接對象
        SqlConnection Conn = new SqlConnection(sConnectionString);
        //開啟Conn
        Conn.Open();
        //sql語句把T_YongH表中的資料資訊都取出來
        string commandString = "Select BianH AS 編號,ZhuCYHM AS 註冊名,XingM AS 姓名,XingB AS 性別 From T_YongH";
        SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, Conn);
        ds_datatable ds = new ds_datatable();
        //填充資料集
        dataAdapter.Fill(ds, "YongH");
        //填充資料表
        DataTable dataTable = ds.Tables["YongH"];
        //建立一個新行並添加到dataTable資料表中
        DataRow dataRow;
        dataRow = dataTable.NewRow();
        //使用Sum含數計算編號的總和,使用CountFunction Compute編號的個數
        dataRow[0] = dataTable.Compute("Sum(編號)", "true");
        dataRow[1] = dataTable.Compute("Count(編號)", "");
        //把資料行添加到YongHTable資料表中
        dataTable.Rows.Add(dataRow);
        GridView1.DataSource = dataTable;
        GridView1.DataBind();

參數說明:

expression 參數需要彙總函式,要計算的運算式字串,基本上類似於Sql Server中的統計運算式。例如,以下是合法運算式:Count(ID)。

filter:統計的過濾字串,只有滿足這個過濾條件的記錄才會被統計,也就是確定在運算式中使用哪些行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.