c# 基于DataTable的Compute方法的扩展
DataTable.Compute(String, String) 方法
计算用来传递筛选条件的当前行上的给定表达式。
定义
- 命名空间:System.Data
- 程序集:System.Data.dll, netstandard.dll, System.Data.Common.dll
https://docs.microsoft.com/zh-cn/dotnet/api/system.data.datatable.compute?view=netframework-4.8
Compute函数的参数就两个:Expression,和Filter。
Expresstion是计算表达式,关于Expression的详细内容请看这里https://docs.microsoft.com/zh-cn/dotnet/api/system.data.datacolumn.expression?view=netframework-4.8。
或者参考转载的 C#中DataTable中的Compute方法使用收集
Filter则是条件过滤器,类似sql的Where条件。
基于以上信息,扩展DataTable类。
可以直接使用
DataTable dt=new Datable();
dt.GetMinValue(“列名”);获取列最小值。
/// <summary>
/// 使用c# 特性“扩展类方法”
/// 使用教程:
/// a、需要给那个类型做扩展,在类型前添加this ,并把该参数放置在第一位。
/// b、使用扩展的方法时,必须引用当前命名空间,否则扩展方法无效。
/// </summary>
public static class DataTableHelper
{ /// <summary>
/// 获取DataTable中,某列的和
/// </summary>
/// <param name="table">The table.</param>
/// <param name="columnName">Name of the column.</param>
/// <returns></returns>
public static object GetSumValue(this DataTable table, string columnName)
{
return GetValueByFunction(table, columnName, "SUM({0})");
}
/// <summary>
/// 获取DataTable中,某列的最大值
/// </summary>
/// <param name="table">The table.</param>
/// <param name="columnName">Name of the column.</param>
/// <returns></returns>
public static double GetMaxValue(this DataTable table, string columnName)
{
return GetValueByFunction(table, columnName, "MAX({0})");
}
/// <summary>
/// 获取DataTable中,某列的最小值
/// </summary>
/// <param name="table">The table.</param>
/// <param name="columnName">Name of the column.</param>
/// <returns></returns>
public static double GetMinValue(this DataTable table, string columnName)
{
return GetValueByFunction(table, columnName, "Min({0})");
} /// <summary>
/// 统计标准偏差
/// </summary>
/// <param name="table"></param>
/// <param name="columnName"></param>
/// <returns></returns>
public static double GetStDevValue(this DataTable table, string columnName)
{
return GetValueByFunction(table, columnName, "StDev({0})");
}
/// <summary>
/// 统计方差
/// </summary>
/// <param name="table"></param>
/// <param name="columnName"></param>
/// <returns></returns>
public static double GetVarValue(this DataTable table, string columnName)
{
return GetValueByFunction(table, columnName, "Var({0})");
} /// <summary>
/// 根据指定公式,获取DataTable中,某列的公式值
/// </summary>
/// <param name="table">要获取数据的源DataTable</param>
/// <param name="columnName">列名称</param>
/// <param name="strFunction">字符串形式的公式</param>
/// <returns></returns>
public static double GetValueByFunction(this DataTable table,string columnName, string strFunction)
{
if (strFunction == string.Empty || strFunction == null)
return double.NaN; string expression = string.Format( strFunction , columnName); double result = double.NaN; switch (table.Columns[columnName].DataType.ToString().ToLower())
{
case "system.datetime":
result = Convert.ToDateTime(table.Compute(expression, "")).ToOADate();
break;
case "system.float":
case "system.double":
case "system.short":
case "system.int":
case "system.long":
result = Convert.ToDouble(table.Compute(expression, "").ToString());
break;
}
return result;
} }
c# 基于DataTable的Compute方法的扩展的更多相关文章
- [datatable]借助DataTable的Compute方法
借助DataTable的Compute方法,DataTable中数据不用事先排好序. 下面代码中的dt是跟前面的是一样的 DataTable dtName = dt.DefaultView.ToTab ...
- 转:DataTable的Compute方法的应用
转自:http://www.cnblogs.com/hfliyi/archive/2013/01/08/2851944.html 项目中遇到计算平均值.标准偏差.平均值+标准偏差.平均值+2倍标准偏差 ...
- C# DataTable Compute方法的使用
在开发中需要对DataTable的数据进行处理,比如累加,求最大最小及平均值等,以前都采用手工对DataTable进行循环并计算的方式,现在发现DataTable的Compute方法可以轻松实现这些功 ...
- C#中DataTable中的Compute方法使用收集
原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...
- 转载 C#中DataTable中的Compute方法使用收集
原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...
- C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写法
https://www.cnblogs.com/johnblogs/p/6006867.html DataTable ds = new DataTable(); //1.lamda 表达式写法(推荐) ...
- C#DataTable一些使用方法
C#DataTable一些使用方法 1,使用DataTable必须要引用System.Data. 2,定义一个DataTable DataTable dt=new DataTable(); 3,为 ...
- 基于AOP的插件化(扩展)方案
在项目迭代开发中经常会遇到对已有功能的改造需求,尽管我们可能已经预留了扩展点,并且尝试通过接口或扩展类完成此类任务.可是,仍然有很多难以预料的场景无法通过上述方式解决.修改原有代码当然能够做到,但是这 ...
- jQuery中的$.extend方法来扩展JSON对象及合并,方便调用对象方法
$.extend方法可以扩展JSON对象,用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 例一 合并 settings 和 options,修改并返回 settings var setting ...
随机推荐
- 如何把当前时间戳转化为时间格式HH:MM:SS
获取当前时间戳 var timestamp = new Date().getTime() 获取当前时间(从1970.1.1开始的毫秒数) // 创建一个函数function timestampToTi ...
- Elasticsearch 知识点整理 一
极力推荐: 官网地址: https://www.elastic.co/guide/en/elasticsearch/reference/6.0 肺腑之言,学ES先学原生的语法,SpringData封装 ...
- Python enumerate() 函数笔记
enumerate函数说明: 函数原型:enumerate(sequence, [start=0]) #第二个参数为指定索引 功能:将可循环序列sequence以start开始分别列出序列数据和数据 ...
- JavaFX简介和Scene Builder工具的安装使用简易教程
JavaFX概述和简介 富互联网应用是那些提供与Web应用程序类似的功能,并可作为桌面应用程序体验的应用.与用户的正常网络应用程序相比,它们提供更好的视觉体验.这些应用程序可作为浏览器插件或作为虚拟机 ...
- zabbix导入数据库报错1046 (3D000) : No database selected
Zabbix导入数据库时报错 使用如下命令导入Zabbix数据库时报错 zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -u ...
- Oracle 相关操作SQL
SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,l.os_user_name,s.machi ...
- PTA刷题记录(3)
团队天梯赛-------(3)分值:15 给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1 ...
- JVM初体验
一.设计堆内存溢出异常:OutOfMemoryError: public class Main { public static void main(String[] args) { List<D ...
- Java基础系列5:深入理解Java异常体系
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...
- jQuery源码分析--为什么在参数列表中传入undefined
(function(window, undefined){ //jQuery code; })(window); 为什么要传入undefined? 1.没有传入undefined: <!DOCT ...