Previous topicNext topic
Help > 开发指南 > SanMuGrid平台编程 > 主要对象 > DataTableHelp > 数据处理 >
Compute

Compute用于返回计算内存表中根据指定的表达式计算的结果。这个表达式可以使用聚合函数计算求和、计数、最大值、最小值等等。

语法:

Compute(Expression,Filter)

参数说明

名称 说明
Expression 必填项,字符串类型,要计算的表达式,使用聚合函数进行统计。
Filter 可选项,字符串类型,用于设置计算的筛选条件,使用表达式筛选。跟本地筛选使用相同的语法。

针对上面这样的数据,我们可以统计以下信息。

Vb.Net
Dim tbl As SmGrid=Proj.CurrentSmGrid
Dim intSum As Integer=tbl.DataTableHelp.Compute("Sum(数量)","")
Proj.MsgDebug.Add("所有数量总和:{0}",intSum)
intSum=tbl.DataTableHelp.Compute("Sum(数量)","产品='产品03' and 客户='客户02'")
Proj.MsgDebug.Add("符合条件的数量总和:{0}",intSum)
intSum=tbl.DataTableHelp.Compute("Count(数量)","")
Proj.MsgDebug.Add("所有项目计数:{0}",intSum)
intSum=tbl.DataTableHelp.Compute("Count(数量)","产品='产品03' and 客户='客户02'")
Proj.MsgDebug.Add("符合条件的项目计数:{0}",intSum)

'返回结果:所有数量总和:1101015
'返回结果:符合条件的数量总和:42783
'返回结果:所有项目计数:2000
'返回结果:符合条件的项目计数:77

C#
SmGrid tbl = Proj.CurrentSmGrid;
int intSum = tbl.DataTableHelp.Compute("Sum(数量)", "");
Proj.MsgDebug.Add("所有数量总和:{0}", intSum);
intSum = tbl.DataTableHelp.Compute("Sum(数量)", "产品='产品03' and 客户='客户02'");
Proj.MsgDebug.Add("符合条件的数量总和:{0}", intSum);
intSum = tbl.DataTableHelp.Compute("Count(数量)", "");
Proj.MsgDebug.Add("所有项目计数:{0}", intSum);
intSum = tbl.DataTableHelp.Compute("Count(数量)", "产品='产品03' and 客户='客户02'");
Proj.MsgDebug.Add("符合条件的项目计数:{0}", intSum);
    
//返回结果:所有数量总和:1101015
//返回结果:符合条件的数量总和:42783
//返回结果:所有项目计数:2000
//返回结果:符合条件的项目计数:77

有时候我们要统计的列不是数值型的,比如说是Object类型或者字符串类型的,此时Compute就会统计失效,这时候我们可以考虑利用Linq的统计功能。

Vb.Net
Dim tbl As SmGrid = Proj.CurrentSmGrid
'筛选出的结果统计“数量”列求和
Dim result As Integer = tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Sum(Function(dr) ObjectExtension.CType(Of Integer)(dr("数量")))
Proj.MsgDebug.Add(result)
'筛选出的结果统计“数量”列求最大值
result = tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Max(Function(dr) ObjectExtension.CType(Of Integer)(dr("数量")))
Proj.MsgDebug.Add(result)
'筛选出的结果统计“数量”列求最小值
result = tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Min(Function(dr) ObjectExtension.CType(Of Integer)(dr("数量")))
Proj.MsgDebug.Add(result)
'筛选出的结果统计“数量”列求平均值
Dim resultD As Double = tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Average(Function(dr) ObjectExtension.CType(Of Integer)(dr("数量")))
Proj.MsgDebug.Add(resultD)
'筛选出的结果统计返回数量
result = tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Count
Proj.MsgDebug.Add(result)
'返回结果:12483
'返回结果:1029
'返回结果:114
'返回结果:567.409090909091
'返回结果:22

C#
SmGrid tbl = Proj.CurrentSmGrid;
//筛选出的结果统计“数量”列求和
int result=tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Sum(dr=>dr["数量"].CType<int>());
Proj.MsgDebug.Add(result);
//筛选出的结果统计“数量”列求最大值
result=tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Max(dr=>dr["数量"].CType<int>());
Proj.MsgDebug.Add(result);
//筛选出的结果统计“数量”列求最小值
result=tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Min(dr=>dr["数量"].CType<int>());
Proj.MsgDebug.Add(result);
//筛选出的结果统计“数量”列求平均值
double resultD=tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Average(dr=>dr["数量"].CType<int>());
Proj.MsgDebug.Add(resultD);
//筛选出的结果统计返回数量
result=tbl.DataTableHelp.Select("业务员='业务员04' and 客户='客户02'").Count;
Proj.MsgDebug.Add(result);

//返回结果:12483
//返回结果:1029
//返回结果:114
//返回结果:567.409090909091
//返回结果:22
< !--EndFragment-- >