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方法的扩展的更多相关文章

  1. [datatable]借助DataTable的Compute方法

    借助DataTable的Compute方法,DataTable中数据不用事先排好序. 下面代码中的dt是跟前面的是一样的 DataTable dtName = dt.DefaultView.ToTab ...

  2. 转:DataTable的Compute方法的应用

    转自:http://www.cnblogs.com/hfliyi/archive/2013/01/08/2851944.html 项目中遇到计算平均值.标准偏差.平均值+标准偏差.平均值+2倍标准偏差 ...

  3. C# DataTable Compute方法的使用

    在开发中需要对DataTable的数据进行处理,比如累加,求最大最小及平均值等,以前都采用手工对DataTable进行循环并计算的方式,现在发现DataTable的Compute方法可以轻松实现这些功 ...

  4. C#中DataTable中的Compute方法使用收集

    原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...

  5. 转载 C#中DataTable中的Compute方法使用收集

    原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...

  6. C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写法

    https://www.cnblogs.com/johnblogs/p/6006867.html DataTable ds = new DataTable(); //1.lamda 表达式写法(推荐) ...

  7. C#DataTable一些使用方法

    C#DataTable一些使用方法   1,使用DataTable必须要引用System.Data. 2,定义一个DataTable DataTable dt=new DataTable(); 3,为 ...

  8. 基于AOP的插件化(扩展)方案

    在项目迭代开发中经常会遇到对已有功能的改造需求,尽管我们可能已经预留了扩展点,并且尝试通过接口或扩展类完成此类任务.可是,仍然有很多难以预料的场景无法通过上述方式解决.修改原有代码当然能够做到,但是这 ...

  9. jQuery中的$.extend方法来扩展JSON对象及合并,方便调用对象方法

    $.extend方法可以扩展JSON对象,用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 例一 合并 settings 和 options,修改并返回 settings var setting ...

随机推荐

  1. ASP.NET Core如何使用压缩中间件提高Web应用程序性能

    前言 压缩可以大大的降低我们Web服务器的响应速度,压缩从而提高我们网页的加载速度,以及节省一定的带宽. 何时使用相应压缩中间件 在IIS,Apache,Nginx中使用基于服务端的响应压缩技术.中间 ...

  2. Unity调用Android相册

    最近有一个项目有这个需求,让用户上传自己的交易凭证的截图,之前因为对调Android原生的东西不太熟悉,就先放了一边 因为项目已经上线,只不过是该功能未开放而已,那么现在为什么要写这篇博客呢,是因为. ...

  3. 【CF696D】Legen...(AC自动机)(矩阵快速幂)

    题目描述 Barney was hanging out with Nora for a while and now he thinks he may have feelings for her. Ba ...

  4. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

  5. CSPS模拟 55

    没睡醒就考试,蓝绶 考试前我在擦眼镜 好像总也擦不干净? 就像石乐志一样一直地在擦 cbx捅了我几下,好像想说什么? 没睡醒,不理 终于擦完了! 雾草要考试? T1 联 先离散化,再正面上线段树 em ...

  6. NOIP模拟12

    也算是最近几次比较水的一次吧. 考试时看T1像个打表找规律的题,扔了,去看T2,带修莫队??不会,完戏.看了T3,我决定还是去看T1. 看着T1,我突然发现T2是个大水题:主席树就行,不带修,修改时只 ...

  7. python机器学习——感知器

    最近在看机器学习相关的书籍,顺便把每天阅读的部分写出来和大家分享,共同学习探讨一起进步!作为机器学习的第一篇博客,我准备从感知器开始,之后会慢慢更新其他内容. 在实现感知器算法前,我们需要先了解一下神 ...

  8. 硬件内存模型到 Java 内存模型,这些硬核知识你知多少?

    Java 内存模型跟上一篇 JVM 内存结构很像,我经常会把他们搞混,但其实它们不是一回事,而且相差还很大的,希望你没它们搞混,特别是在面试的时候,搞混了的话就会答非所问,影响你的面试成绩,当然也许你 ...

  9. formdata,ajax提交数据

    var data = document.getElementById("#dataForm"); var formData = new FormData(data); var ac ...

  10. sshd服务及基于密钥远程登陆(无需密码)

    上一条博客说明了用sshd服务远程登陆另一个系统,但是需要密码,如果不用密码呢?有没有简便的方法呢?下面为大家介绍一下,也就是基于密钥的安全验证:需要在本地生成”密钥对“后将公钥传送至服务端,进行公共 ...