`
csstome
  • 浏览: 1522665 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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,EventArgse)
... {

// System.Data.DataTable计算功能详解,转载请保留以下信息
// 测试环境vs2005,c#
// 作者:jinjazz
// 作者blog: http://blog.csdn.net/jinjazz/


System.Data.DataTabletable
= 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.DataRowdRow
= 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.DataColumncolumn
= 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的casewhen
column.Expression = " iif(value>5,1000,2000) " ;
test
= table.Select( " id='id1' " )[ 0 ][ " exp1 " ];
Console.WriteLine(test);
// test=2000;

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

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

// 嵌套的三元运算
column.Expression = " iif(value>5,1000,iif(idlike'%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


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


// 初始化子表,父子表关系
DataTabletableChild = new DataTable();

tableChild.Columns.Add(
" id " , typeof ( string ));
tableChild.Columns.Add(
" value " , typeof ( int ));

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

for ( int i = 1 ;i <= 10 ;i ++ )
... {
System.Data.DataRowdRow
= 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);
// <
分享到:
评论

相关推荐

    untiy 使用的System.Data.dll文件

    《Unity中的System.Data.dll文件详解》 在Unity游戏开发中,System.Data.dll是不可或缺的一部分,它是.NET框架的一个重要组件,提供了对数据访问和管理的强大支持。这篇内容将深入探讨System.Data.dll在Unity环境中...

    VB.NET的DataTable常用方法总结

    ### VB.NET中的DataTable常用方法详解 #### 一、行操作:追加与删除 ##### 行追加 在处理DataTable时,我们常常需要向表中添加新的数据行。以下是几种常用的行追加方法: 1. **`DataTable.Rows.Add()`** 这是最...

    vs2012连接 sqlite 试用版 4.16版本

    首先,要在VS2012中使用SQLite,你需要安装SQLite的.NET数据提供程序,例如System.Data.SQLite库。这个库提供了与.NET Framework的集成,使开发人员能够通过ADO.NET接口操作SQLite数据库。可以通过NuGet包管理器来...

    将datatable里的数据导出DBF文件

    System.Data.DataTable dt1 = new DataTable(); adp.Fill(dt1); ``` ### 5. 数据同步 - **进度条初始化**:设置进度条的初始值和最大值,以便跟踪数据同步过程。 - 代码示例: ```csharp prgBar.Value = 0; ...

    c#读取excel

    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数据库的连接、查询、分页等各种常见操作。通过本文,读者可以了解如何使用C#语言来操作SQLite数据库...

    excel导入到集合

    System.Data.DataTable outPutTable = new System.Data.DataTable(); try { string connstr = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=\"" + fileName + "\";ExtendedProperties=\"Excel8.0;HDR=YES;...

    页面导出EXCEL

    public static void DataTable2Excel(System.Data.DataTable dtData) { // 创建一个 DataGrid 对象 System.Web.UI.WebControls.DataGrid dgExport = null; // 获取当前的 HttpContext System.Web.HttpContext ...

    C#--WEB--日历控件查询日期[借鉴].pdf

    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` 是一个非常重要的数据结构,它提供了类似数据库表格的功能,用于存储和操作数据集。本文将详细介绍如何在C#中操作`DataTable`,特别是...

    DataTable导出成Excel.doc

    ### DataTable导出至Excel知识点详解 #### 一、概述 在.NET开发中,经常需要将数据从`DataTable`导出到Excel文件中,以便于数据分析或进一步处理。本文档将详细介绍如何实现这一功能,包括必要的步骤和技术要点。 ...

    SharpChinese.rar

    此外,`System.Xml`和`System.Xml.Linq`用于XML文档的读写和解析,`System.Json`处理JSON数据,`System.Web`则涉及ASP.NET相关功能,这些都是C#类库中的重要组成部分。 `SharpChinese.rar`这个资源包,通过收集和...

    DataBinder.Eval总结

    - 绑定到 DataView, DataTable, DataSet:`((DataRowView)Container.DataItem)["字段名"]%&gt;` 或 `((DataRowView)Container.DataItem).Rows[0]["字段名"]%&gt;`。 6. **注意事项** 在使用 `(DataRowView)Container....

    c#到处导入代码

    以下是如何实现这一功能的示意图解: ```csharp private static System.Data.DataTable GetData(string strPath) { System.Data.DataTable dt = new System.Data.DataTable(); try { string strCon = ...

    从Excel_导入数据到DataTable

    - 使用`System.Data.DataTable`创建一个新的`DataTable`实例。 - 根据Excel表中的列数,动态添加相应数量的列。示例代码中添加了9列。 2. **打开Excel文件**: - 通过`Microsoft.Office.Interop.Excel....

    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...

    .NET框架类库中的命名空间

    - **System.Data**: 提供了用于数据访问和处理的类,包括ADO.NET相关的类,比如`DataTable`、`DataSet`等。 - **System.Windows.Forms**: 包含用于创建基于Windows的应用程序的类,支持Windows Forms控件和其他UI...

    修改DataTable的某一行某一列的值

    在.NET框架中,`System.Data.DataTable`类是用于存储、操作和检索数据的强大工具。对于那些需要在内存中处理数据的应用程序来说,`DataTable`提供了一种灵活的方式来组织和管理数据。本文将详细介绍如何在`DataTable...

    动态添加datatable

    - `DataTable`是System.Data命名空间下的一个类,用于表示内存中的二维表格。 - 它类似于关系数据库中的表,可以包含多个列(Column),每一列可以有不同的数据类型,以及多行数据(Row)。 2. **创建`DataTable`...

Global site tag (gtag.js) - Google Analytics