Compute用于返回計算內(nèi)存表中根據(jù)指定的表達(dá)式計算的結(jié)果。這個表達(dá)式可以使用聚合函數(shù)計算求和、計數(shù)、最大值、最小值等等。
語法:
Compute(Expression,Filter)
參數(shù)說明
名稱 |
說明
|
Expression |
必填項(xiàng),字符串類型,要計算的表達(dá)式,使用聚合函數(shù)進(jìn)行統(tǒng)計。 |
Filter |
可選項(xiàng),字符串類型,用于設(shè)置計算的篩選條件,使用表達(dá)式篩選。跟本地篩選使用相同的語法。 |

針對上面這樣的數(shù)據(jù),我們可以統(tǒng)計以下信息。
Vb.Net
|
Dim tbl As SmGrid=Proj.CurrentSmGrid
Dim intSum As Integer=tbl.DataTableHelp.Compute("Sum(數(shù)量)","")
Proj.MsgDebug.Add("所有數(shù)量總和:{0}",intSum)
intSum=tbl.DataTableHelp.Compute("Sum(數(shù)量)","產(chǎn)品='產(chǎn)品03' and 客戶='客戶02'")
Proj.MsgDebug.Add("符合條件的數(shù)量總和:{0}",intSum)
intSum=tbl.DataTableHelp.Compute("Count(數(shù)量)","")
Proj.MsgDebug.Add("所有項(xiàng)目計數(shù):{0}",intSum)
intSum=tbl.DataTableHelp.Compute("Count(數(shù)量)","產(chǎn)品='產(chǎn)品03' and 客戶='客戶02'")
Proj.MsgDebug.Add("符合條件的項(xiàng)目計數(shù):{0}",intSum)
'返回結(jié)果:所有數(shù)量總和:1101015
'返回結(jié)果:符合條件的數(shù)量總和:42783
'返回結(jié)果:所有項(xiàng)目計數(shù):2000
'返回結(jié)果:符合條件的項(xiàng)目計數(shù):77 |
C# |
SmGrid tbl = Proj.CurrentSmGrid;
int intSum = tbl.DataTableHelp.Compute("Sum(數(shù)量)", "");
Proj.MsgDebug.Add("所有數(shù)量總和:{0}", intSum);
intSum = tbl.DataTableHelp.Compute("Sum(數(shù)量)", "產(chǎn)品='產(chǎn)品03' and 客戶='客戶02'");
Proj.MsgDebug.Add("符合條件的數(shù)量總和:{0}", intSum);
intSum = tbl.DataTableHelp.Compute("Count(數(shù)量)", "");
Proj.MsgDebug.Add("所有項(xiàng)目計數(shù):{0}", intSum);
intSum = tbl.DataTableHelp.Compute("Count(數(shù)量)", "產(chǎn)品='產(chǎn)品03' and 客戶='客戶02'");
Proj.MsgDebug.Add("符合條件的項(xiàng)目計數(shù):{0}", intSum);
//返回結(jié)果:所有數(shù)量總和:1101015
//返回結(jié)果:符合條件的數(shù)量總和:42783
//返回結(jié)果:所有項(xiàng)目計數(shù):2000
//返回結(jié)果:符合條件的項(xiàng)目計數(shù):77 |
有時候我們要統(tǒng)計的列不是數(shù)值型的,比如說是Object類型或者字符串類型的,此時Compute就會統(tǒng)計失效,這時候我們可以考慮利用Linq的統(tǒng)計功能。
Vb.Net
|
Dim tbl As SmGrid = Proj.CurrentSmGrid
'篩選出的結(jié)果統(tǒng)計“數(shù)量”列求和
Dim result As Integer = tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Sum(Function(dr) ObjectExtension.CType(Of Integer)(dr("數(shù)量")))
Proj.MsgDebug.Add(result)
'篩選出的結(jié)果統(tǒng)計“數(shù)量”列求最大值
result = tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Max(Function(dr) ObjectExtension.CType(Of Integer)(dr("數(shù)量")))
Proj.MsgDebug.Add(result)
'篩選出的結(jié)果統(tǒng)計“數(shù)量”列求最小值
result = tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Min(Function(dr) ObjectExtension.CType(Of Integer)(dr("數(shù)量")))
Proj.MsgDebug.Add(result)
'篩選出的結(jié)果統(tǒng)計“數(shù)量”列求平均值
Dim resultD As Double = tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Average(Function(dr) ObjectExtension.CType(Of Integer)(dr("數(shù)量")))
Proj.MsgDebug.Add(resultD)
'篩選出的結(jié)果統(tǒng)計返回數(shù)量
result = tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Count
Proj.MsgDebug.Add(result)
'返回結(jié)果:12483
'返回結(jié)果:1029
'返回結(jié)果:114
'返回結(jié)果:567.409090909091
'返回結(jié)果:22
|
C# |
SmGrid tbl = Proj.CurrentSmGrid;
//篩選出的結(jié)果統(tǒng)計“數(shù)量”列求和
int result=tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Sum(dr=>dr["數(shù)量"].CType<int>());
Proj.MsgDebug.Add(result);
//篩選出的結(jié)果統(tǒng)計“數(shù)量”列求最大值
result=tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Max(dr=>dr["數(shù)量"].CType<int>());
Proj.MsgDebug.Add(result);
//篩選出的結(jié)果統(tǒng)計“數(shù)量”列求最小值
result=tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Min(dr=>dr["數(shù)量"].CType<int>());
Proj.MsgDebug.Add(result);
//篩選出的結(jié)果統(tǒng)計“數(shù)量”列求平均值
double resultD=tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Average(dr=>dr["數(shù)量"].CType<int>());
Proj.MsgDebug.Add(resultD);
//篩選出的結(jié)果統(tǒng)計返回數(shù)量
result=tbl.DataTableHelp.Select("業(yè)務(wù)員='業(yè)務(wù)員04' and 客戶='客戶02'").Count;
Proj.MsgDebug.Add(result);
//返回結(jié)果:12483
//返回結(jié)果:1029
//返回結(jié)果:114
//返回結(jié)果:567.409090909091
//返回結(jié)果:22 < !--EndFragment-- >
|