DataTable.Compute用法 |
發(fā)布時(shí)間: 2012/9/11 16:59:09 |
以前還真沒(méi)想到DataTable.Compute具有這么多的功能 1:聚合函數(shù)“Sum()” 2:自由計(jì)算表達(dá)式“20*30+1” 3:bool表達(dá)式“1=2” 4:IFF邏輯表達(dá)式“ IIF(20>1000, 0, 1)” //還支持IsNull,Trim,SubString等 一個(gè)小應(yīng)用:讓DataTable模擬Excel的Formula功能。 Excel中的Formula功能強(qiáng)大,如果能讓DataTable有類似的功能就好了。大部分事件DataTable只是用作數(shù)據(jù)載體,其實(shí)很少用它做計(jì)算。DataTable提供的函數(shù)Compute就提供了功能強(qiáng)大的計(jì)算功能。 Compute函數(shù)的參數(shù)就兩個(gè):Expression,和Filter. Expresstion是計(jì)算表達(dá)式,關(guān)于Expression的詳細(xì)內(nèi)容請(qǐng)看這里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80)。aspx”.而Filter則是條件過(guò)濾器,類似sql的Where條件。 1: 這里詳細(xì)介紹的就是Expresstion. 先看最簡(jiǎn)單的用法,使用聚合函數(shù)。這個(gè)聚合函數(shù)就是報(bào)表或者Excel中常用的函數(shù),比如Sum,Avg等等。對(duì)于數(shù)據(jù)列,Datatable可以方便的進(jìn)行計(jì)算,比如DataTable.Cumpute(“Sum(列1)”,“列1>0”); 對(duì)于簡(jiǎn)單的統(tǒng)計(jì)功能,這些函數(shù)就足夠用了。(其他提供的函數(shù)有min,max,count,求方差,標(biāo)準(zhǔn)偏差等等)。這個(gè)功能常用,倒也不奇怪。 再看“自由表達(dá)式”計(jì)算。把數(shù)學(xué)計(jì)算表達(dá)式寫(xiě)成字符串,然后直接投入Compute函數(shù)計(jì)算,就可以得到計(jì)算結(jié)果。這樣,動(dòng)態(tài)生成的計(jì)算表達(dá)式就可以計(jì)算出來(lái)了。比方說(shuō)要計(jì)算“列1×30+20+2”或者是純粹的數(shù)學(xué)計(jì)算。 出了計(jì)算出具體的結(jié)果,Compute函數(shù)還能進(jìn)行邏輯計(jì)算。比方說(shuō)這個(gè)表達(dá)式就能返回false:Compute(“1=2”,“true”); 這個(gè)的用法可能想上邊的情形差不多,在自由組裝一些條件的時(shí)候可以得到結(jié)果。 在Excel中,還經(jīng)常用到的就是LogicTest功能了,可以指定一些邏輯表達(dá)式,比如這樣的:“IF(20>1000, 0, 1)”.而這個(gè)功能要是放到DataTable中該如何實(shí)現(xiàn)呢?也是用Compute,這樣寫(xiě)就可以了:“IIF(20>1000, 0, 1)”. 在DataTable里面如果實(shí)現(xiàn)“IF(C102=0,0,C105/C102*30)”就用上邊的這些技術(shù)點(diǎn)就可以了。 2:至于第二個(gè)參數(shù)Filter,就是一個(gè)簡(jiǎn)單的查詢條件。比如,“true”, “Id>4”, “Name like '%nd' and sex='male‘”. 條件不可能很復(fù)雜,這些已經(jīng)比較夠用了。 以前用過(guò)的Marge什么的也不錯(cuò),還可以作內(nèi)連接,在數(shù)據(jù)量小,需要簡(jiǎn)單計(jì)算的情況下,這些功能很有用。 當(dāng)然,如果邏輯極其復(fù)雜,DT的這點(diǎn)功能就不夠了,還是得自己寫(xiě)邏輯(即使要實(shí)現(xiàn)“IF(C102=0,0,C105/C102*30)”,也是要自己寫(xiě)一點(diǎn)處理邏輯的,不過(guò)比較通用,寫(xiě)一次就好了) 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |