`
- 浏览:
58070 次
- 性别:
- 来自:
北京
-
System.Data.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计算功能详解,转载请保留以下信息
//测试环境 vs2005,c#
//作者: jinjazz
//作者blog: http://blog.csdn.net/jinjazz/

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).val
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### System.Data.SQLite.DLL的使用详解 #### 一、SQLite简介 SQLite是一种轻量级的数据库管理系统,类似于Access,但其主要特点在于它能够将整个数据库(包括定义、表、索引以及数据本身)存储在一个单一的文件中。...
《Unity中的System.Data.dll文件详解》 在Unity游戏开发中,System.Data.dll是不可或缺的一部分,它是.NET框架的一个重要组件,提供了对数据访问和管理的强大支持。这篇内容将深入探讨System.Data.dll在Unity环境中...
### VB.NET中的DataTable常用方法详解 #### 一、行操作:追加与删除 ##### 行追加 在处理DataTable时,我们常常需要向表中添加新的数据行。以下是几种常用的行追加方法: 1. **`DataTable.Rows.Add()`** 这是最...
首先,要在VS2012中使用SQLite,你需要安装SQLite的.NET数据提供程序,例如System.Data.SQLite库。这个库提供了与.NET Framework的集成,使开发人员能够通过ADO.NET接口操作SQLite数据库。可以通过NuGet包管理器来...
System.Data.DataTable dt1 = new DataTable(); adp.Fill(dt1); ``` ### 5. 数据同步 - **进度条初始化**:设置进度条的初始值和最大值,以便跟踪数据同步过程。 - 代码示例: ```csharp prgBar.Value = 0; ...
static System.Data.DataTable dt_jia = new System.Data.DataTable(); static System.Data.DataTable dt_yi = new System.Data.DataTable(); ``` 这里定义了三个静态变量:一个`Hashtable`用于存储键值对,两个`...
C#操作SQLite数据库帮助类详解 本文档介绍了C#操作SQLite数据库帮助类的实现和封装技巧,主要涉及到C#针对sqlite数据库的连接、查询、分页等各种常见操作。通过本文,读者可以了解如何使用C#语言来操作SQLite数据库...
System.Data.DataTable outPutTable = new System.Data.DataTable(); try { string connstr = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=\"" + fileName + "\";ExtendedProperties=\"Excel8.0;HDR=YES;...
`DataTable`是`System.Data`命名空间的一部分,通常用于WinForms、ASP.NET等应用程序中。 ##### 2.2 JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器...
public static void DataTable2Excel(System.Data.DataTable dtData) { // 创建一个 DataGrid 对象 System.Web.UI.WebControls.DataGrid dgExport = null; // 获取当前的 HttpContext System.Web.HttpContext ...
private System.Data.DataTable dt = null; protected void Page_Load(object sender, EventArgs e) { dt = new System.Data.DataTable(); dt.Columns.Add("date", typeof(DateTime)); dt.Columns.Add(...
### C# DataTable 数据表的操作详解 #### 一、概述 在C#开发中,`DataTable` 是一个非常重要的数据结构,它提供了类似数据库表格的功能,用于存储和操作数据集。本文将详细介绍如何在C#中操作`DataTable`,特别是...
### DataTable导出至Excel知识点详解 #### 一、概述 在.NET开发中,经常需要将数据从`DataTable`导出到Excel文件中,以便于数据分析或进一步处理。本文档将详细介绍如何实现这一功能,包括必要的步骤和技术要点。 ...
此外,`System.Xml`和`System.Xml.Linq`用于XML文档的读写和解析,`System.Json`处理JSON数据,`System.Web`则涉及ASP.NET相关功能,这些都是C#类库中的重要组成部分。 `SharpChinese.rar`这个资源包,通过收集和...
- 绑定到 DataView, DataTable, DataSet:`((DataRowView)Container.DataItem)["字段名"]%>` 或 `((DataRowView)Container.DataItem).Rows[0]["字段名"]%>`。 6. **注意事项** 在使用 `(DataRowView)Container....
以下是如何实现这一功能的示意图解: ```csharp private static System.Data.DataTable GetData(string strPath) { System.Data.DataTable dt = new System.Data.DataTable(); try { string strCon = ...
- 使用`System.Data.DataTable`创建一个新的`DataTable`实例。 - 根据Excel表中的列数,动态添加相应数量的列。示例代码中添加了9列。 2. **打开Excel文件**: - 通过`Microsoft.Office.Interop.Excel....
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(strsql, objConn); System.Data.OleDb.OleDbDataAdapter ad = new System.Data.OleDb.OleDbDataAdapter(cmd); ad.Fill(dt); } catch...
- **System.Data**: 提供了用于数据访问和处理的类,包括ADO.NET相关的类,比如`DataTable`、`DataSet`等。 - **System.Windows.Forms**: 包含用于创建基于Windows的应用程序的类,支持Windows Forms控件和其他UI...
在.NET框架中,`System.Data.DataTable`类是用于存储、操作和检索数据的强大工具。对于那些需要在内存中处理数据的应用程序来说,`DataTable`提供了一种灵活的方式来组织和管理数据。本文将详细介绍如何在`DataTable...