|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。之前还真没想到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,求方差,尺度偏向等等)。这个功效经常使用,倒也不奇异。
再看“自在表达式”盘算。把数学盘算表达式写成字符串,然后间接投进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”,“Namelike’%nd’andsex=’male’”.
前提不成能很庞大,这些已对照够用了。
之前用过的Marge甚么的也不错,还能够作内毗连,在数据量小,必要复杂盘算的情形下,这些功效很有效。
固然,假如逻辑极为庞大,DT的这点功效就不敷了,仍是得本人写逻辑(即便要完成“IF(C102=0,0,C105/C102*30)”,也是要本人写一点处置逻辑的,不外对照通用,写一次就行了)。
----------------------------------
DataTable.Compute办法
盘算用来传送选择前提确当前行上的给定表达式
publicObjectCompute(stringexpression,stringfilter)
实例:
stringsConnectionString;//声明一个字符串
//毗连数据库字符串,毗连到XBMIS数据库,用户名是sa
sConnectionString="DataSource=.;InitialCatalog=XBMIS;UserID=sa;";
//创立SqlConnection数据库毗连工具
SqlConnectionConn=newSqlConnection(sConnectionString);
//翻开Conn
Conn.Open();
//sql语句把T_YongH表中的数据信息都掏出来
stringcommandString="SelectBianHAS编号,ZhuCYHMAS注册名,XingMAS姓名,XingBAS性别FromT_YongH";
SqlDataAdapterdataAdapter=newSqlDataAdapter(commandString,Conn);
ds_datatableds=newds_datatable();
//添补数据集
dataAdapter.Fill(ds,"YongH");
//添补数据表
DataTabledataTable=ds.Tables["YongH"];
//创立一个新行并增加到dataTable数据表中
DataRowdataRow;
dataRow=dataTable.NewRow();
//利用Sum含数盘算编号的总和,利用Count函数盘算编号的个数
dataRow[0]=dataTable.Compute("Sum(编号)","true");
dataRow[1]=dataTable.Compute("Count(编号)","");
//把数据行增加到YongHTable数据表中
dataTable.Rows.Add(dataRow);
GridView1.DataSource=dataTable;
GridView1.DataBind();
参数申明:
expression参数必要聚合函数,要盘算的表达式字符串,基础上相似于SqlServer中的统计表达式。比方,以下是正当表达式:Count(ID)。
filter:统计的过滤字符串,只要满意这个过滤前提的纪录才会被统计,也就是断定在表达式中利用哪些行。
中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。 |
|