`

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
分享到:
评论

相关推荐

    System.Data.SQLite.DLL的使用

    ### System.Data.SQLite.DLL的使用详解 #### 一、SQLite简介 SQLite是一种轻量级的数据库管理系统,类似于Access,但其主要特点在于它能够将整个数据库(包括定义、表、索引以及数据本身)存储在一个单一的文件中。...

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

    将DataTable转化为JSON

    `DataTable`是`System.Data`命名空间的一部分,通常用于WinForms、ASP.NET等应用程序中。 ##### 2.2 JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器...

    页面导出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...

Global site tag (gtag.js) - Google Analytics