c# 基于DataTable的Compute方法的扩展
DataTable.Compute(String, String) 方法
计算用来传递筛选条件的当前行上的给定表达式。
定义
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; } }