日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataTable的计算功能(转)

發布時間:2023/12/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataTable的计算功能(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C#--詳解DataTable的計算功能? using System;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
namespace WindowsApplication1
{
? public partial class Form1 : Form
? {
? ?
? public Form1()
? {
? InitializeComponent();
? }

? ?

? private void button1_Click(object sender, EventArgs e)
? {

? ?

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


? //計算常量,可以沒有初始化列
? object test = table.Compute("1+1", "");
? Console.WriteLine(test);
? //test=2;

? test = table.Compute("1+1", "false");
? Console.WriteLine(test);
? //test=2;常數計算和filter無關

? test = table.Compute("abs(1)", "");
? Console.WriteLine(test);
? //test=null,不知道為這個什么沒有抱錯,而且返回null,其他的數學函數都會抱錯

? test = table.Compute("2%2", "");
? Console.WriteLine(test);
? //test=0;
? //其他函數參考下面的計算列



? //初始化datatale
? table.Columns.Add("id", typeof(string));
? table.Columns.Add("value", typeof(int));
? for (int i = 1; i <= 10; i++)
? {
? System.Data.DataRow dRow = table.NewRow();
? dRow["id"] = "id"+i.ToString();
? dRow["value"] = i;
? table.Rows.Add(dRow);
? }

? ?

? //test = table.Compute("value+1", "true");
? 拋出異常,這里必須是聚合函數



? //*************************************支持的聚合函數**********************//
? ?
? //求數量
? test = table.Compute("count(id)", "false");
? Console.WriteLine(test);?
? //test=0;

? test = table.Compute("count(id)", "true");
? Console.WriteLine(test);?
? //test=10;



? //求和
? test = table.Compute("sum(value)", "");
? Console.WriteLine(test);
? //test=55;

? //test = table.Compute("sum(id)","");
? 拋出異常,這里不能是string

? ?
? //平均
? test = table.Compute("avg(value)", "");
? Console.WriteLine(test);
? //test=5;


? //最小
? test = table.Compute("min(value)", "");
? Console.WriteLine(test);
? //test=1;

? //最大
? test = table.Compute("max(value)", "");
? Console.WriteLine(test);
? //test=10;

? //統計標準偏差
? test = table.Compute("StDev(value)", "");
? Console.WriteLine(test);
? //test=3.02765035409749

? //統計方差
? test = table.Compute("Var(value)", "");
? Console.WriteLine(test);
? //test=9.16666666666667


? //復雜計算
? test = table.Compute("max(value)/sum(value)", "");
? Console.WriteLine(test);
? //test=0.181818181818182
?
? /*******************************************計算列*************************/

? System.Data.DataColumn column = new DataColumn("exp1",typeof(float));
? table.Columns.Add(column);


? //簡單計算
? column.Expression = "value*2";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=2;

? //字符串函數
? column.Expression = "len(id)";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=3;

? //字符串函數
? column.Expression = "len(' '+id+' ')";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=5;

? //字符串函數
? column.Expression = "len(trim(' '+id+' '))";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=3;

? //字符串函數
? column.Expression = "substring(id,3,len(id)-2)";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=1; //substring的起始字符位置為1不是0

? //類型轉換
? column.Expression = "convert(substring(id,3,len(id)-2),'System.Int32')*1.6";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=1.6;

? //相當于sqlserver的isnull
? column.Expression = "isnull(value,10)";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=1;

? //三元運算符,相當于sqlserver的case when
? column.Expression = "iif(value>5,1000,2000)";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=2000;

? //like運算符
? column.Expression = "iif(id like '%1',1000,2000)";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=1000;

? //in運算符
? column.Expression = "iif(id not in('id1'),1000,2000)";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=2000;

? //嵌套的三元運算
? column.Expression = "iif(value>5,1000,iif(id like '%1',4000,2000))";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=4000;


? //客戶端計算所占總數的百分比
? column.Expression = "value/sum(value)";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=0.01818182?


? //客戶端計算差值,比如nba常規賽的勝場差
? column.Expression = "max(value)-value";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=9

? ?
? //***********************父子表計算*************************************/


? //初始化子表,父子表關系
? DataTable tableChild = new DataTable();
? ?
? tableChild.Columns.Add("id", typeof(string));
? tableChild.Columns.Add("value", typeof(int));

? System.Data.DataSet ds = new DataSet();
? ds.Tables.Add(tableChild);
? ds.Tables.Add(table);
? DataRelation relation = new DataRelation("relation", table.Columns["id"], tableChild.Columns["id"]);
? ds.Relations.Add(relation);

? for (int i = 1; i <= 10; i++)
? {
? System.Data.DataRow dRow = tableChild.NewRow();
? dRow["id"] = "id1";
? dRow["value"] = i;
? tableChild.Rows.Add(dRow);
? }


? //計算子表記錄數
? column.Expression = "count(child(relation).value)";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=10;
? ?


? //計算父子表的百分比
? column.Expression = "value/sum(child(relation).value)";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=0.01818182;


? //計算父子表的差值,比如父表為庫存數量,子表為訂購數量,計算得出需要補充的數量
? column.Expression = "iif(value-sum(child(relation).value)>0,0,value-sum(child(relation).value))";
? test = table.Select("id='id1'")[0]["exp1"];
? Console.WriteLine(test);
? //test=-54;

? //比較遺憾的是沒有發現能夠計算同比和環比的方法,而且計算列無法作為約束
? //************結束,DataTable可以讓你盡量發揮聰明才智來減少繁雜的sql語句并且減輕服務器計算符合^&^
? ?
? ?
? ?
? }

? ?


? }
}?

轉載于:https://www.cnblogs.com/guojingyang/archive/2008/11/27/1342299.html

總結

以上是生活随笔為你收集整理的DataTable的计算功能(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。