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

浙公网安备 33010602011771号