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 ...
随机推荐
- js自增图片切换
使用js自增进行图片的切换 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=& ...
- 第二篇:版本控制git之分支
有人把 Git 的分支模型称为它的`‘必杀技特性’',也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 为何 Git 的分支模型如此出众呢? Git 处理分支的方式可谓是难以置信的轻量, ...
- 2018.8.10 python中的迭代器
主要内容: 1.函数名的使用 2.闭包 3.迭代器 一.函数名的运用 函数名是一个变量,但他是一个特殊的变量,与括号配合可执行函数的变量. 1.函数名的内存地址 def func(): print(' ...
- 关于css里大于号(>)的用法
之前用的css没涉及到这个问题,今天看到.知道大概用法,但不知道和普通的后代选择器有什么区别.到网上找了,其实w3c的css文档里有很详细明确的介绍(http://www.w3school.com.c ...
- MIT线性代数:4.A的LU分解
- Pyinstaller打包scrapy
环境 Windows7 Python3.65 scrapy1.74 PyInstaller3.5 创建打包脚本 在与scrapy.cfg同路径创建start.py # -*- coding: utf- ...
- Django学习day6——模板
在day4中,你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. html = "<html><body& ...
- 2019.11.11 洛谷月赛t3
题目背景 由于Y校的老师非常毒瘤,要求\(zhouwc\)在\(csp\)考前最后\(3\)天参加期中考,\(zhouwc\)非常生气,决定消极考试,以涂完卡但全错为目标.现在\(retcarizy\ ...
- elastalter邮件告警
一:简介 ElastAlert是一个简单的框架,用于通过Elasticsearch中的数据异常警告,峰值或其他感兴趣的模式. 监控类型 "匹配Y时间内有X个事件的地方"(frequ ...
- 雅虎日本如何用 Pulsar 构建日均千亿的消息平台
雅虎日本是一家雅虎和软银合资的日本互联网公司,是日本最受欢迎的门户网站之一.雅虎日本的互联网服务在日本市场占主导地位. 下图从三个维度显示了雅虎日本的经营规模.第一个是服务数量,雅虎日本提供上百种互联 ...