加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

System.Data.DataTable计算功能详解

发布时间:2020-12-12 15:56:18 所属栏目:MsSql教程 来源:网络整理
导读:using ?System; ?System.ComponentModel; ?System.Data; ?System.Windows.Forms; namespace ?WindowsApplication1 ... { ???? public ? partial class ?Form1?:?Form ???? ... { ???????? ???????? ?Form1() ???????? ... { ????????????InitializeComponent

using ?System;

?System.ComponentModel;

?System.Data;

?System.Windows.Forms;

namespace ?WindowsApplication1

{

????
public?partialclass?Form1?:?Form

????
...{

????????

????????
?Form1()

????????
...{

????????????InitializeComponent();

????????}


???????


????????
privatevoid?button1_Click(object?sender,?EventArgs?e)

????????
...{


????????????
//System.Data.DataTable计算功能详解,转载请保留以下信息

????????????
测试环境??????vs2005,c#

????????????
作者:?????????jinjazz

????????????
作者blog:?????http://blog.csdn.net/jinjazz/

???????????


????????????System.Data.DataTable?table?
=new?DataTable();



????????????
计算常量,可以没有初始化列?????????????test??table.Compute("1+1,?"");

????????????Console.WriteLine(test);

????????????
test=2;

????????????test?
falsetest=2;常数计算和filter无关abs(1)test=null,不知道为这个什么没有抱错,而且返回null,其他的数学函数都会抱错2%2test=0;

????????????
其他函数参考下面的计算列




????????????
初始化datatale????????????table.Columns.Add(idtypeof(string));

????????????table.Columns.Add(
valueint));

????????????
for?(?i?1;?i?<=10;?i++)

????????????
...{

????????????????System.Data.DataRow?dRow?
?table.NewRow();

????????????????dRow[
]?+i.ToString();

????????????????dRow[
?i;

????????????????table.Rows.Add(dRow);

????????????}


????????????


????????????
test?=?table.Compute("value+1",?"true");

????????????/**/////抛出异常,这里必须是聚合函数




????????????
*************************************支持的聚合函数**********************

????????????

????????????
求数量????????????test?count(id));

????????????Console.WriteLine(test);?

????????????
test=0;truetest=10;




????????????
求和sum(value)test=55;


????????????
test?=?table.Compute("sum(id)","");

/**//抛出异常,这里不能是string平均avg(value)test=5;



????????????
最小min(value)test=1;


????????????
最大max(value)test=10;


????????????
统计标准偏差StDev(value)test=3.02765035409749


????????????
统计方差Var(value)test=9.16666666666667



????????????
复杂计算max(value)/sum(value)test=0.181818181818182?

????????????
/**//*******************************************计算列*************************/


????????????System.Data.DataColumn?column?
?DataColumn(exp1float));

????????????table.Columns.Add(column);



????????????
简单计算????????????column.Expression?value*2;

????????????test?
?table.Select(id='id1')[0][];

????????????Console.WriteLine(test);

????????????
test=2;


????????????
字符串函数len(id)test=3;


????????????
len('?'+id+'?')test=5;


????????????
len(trim('?'+id+'?'))substring(id,3,len(id)-2)test=1;?substring的起始字符位置为1不是0


????????????
类型转换convert(substring(id,len(id)-2),'System.Int32')*1.6test=1.6;


????????????
相当于sqlserver的isnullisnull(value,10)三元运算符,相当于sqlserver的case?wheniif(value>5,1000,2000)test=2000;


????????????
like运算符iif(id?like?'%1',0);">test=1000;


????????????
in运算符iif(id?not?in('id1'),0);">嵌套的三元运算test=4000;



????????????
客户端计算所占总数的百分比value/sum(value)test=0.01818182?



????????????
客户端计算差值,比如nba常规赛的胜场差max(value)-valuetest=9


???????????

????????????
***********************父子表计算*************************************/



????????????
初始化子表,父子表关系????????????DataTable?tableChild??DataTable();

????????????

????????????tableChild.Columns.Add(
));

????????????tableChild.Columns.Add(
));


????????????System.Data.DataSet?ds?
?DataSet();

????????????ds.Tables.Add(tableChild);

????????????ds.Tables.Add(table);

????????????DataRelation?relation?
?DataRelation(relation],?tableChild.Columns[]);

????????????ds.Relations.Add(relation);


????????????
)

????????????
...?tableChild.NewRow();

????????????????dRow[
id1;

????????????????dRow[
?i;

????????????????tableChild.Rows.Add(dRow);

????????????}
计算子表记录数count(child(relation).value)test=10;

????????????



????????????
计算父子表的百分比value/sum(child(relation).value)test=0.01818182;



????????????
计算父子表的差值,比如父表为库存数量,子表为订购数量,计算得出需要补充的数量iif(value-sum(child(relation).value)>0,value-sum(child(relation).value))test=-54;


????????????
比较遗憾的是没有发现能够计算同比和环比的方法,而且计算列无法作为约束

????????????
************结束,DataTable可以让你尽量发挥聪明才智来减少繁杂的sql语句并且减轻服务器计算符合^&^???????????

????????????

????????????

????????}


????????



????}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读