站点图标 久久日记本

告别循环,在DataSet中计算或者统计列

先给一个小例子,假设我们要查询一张 订单表(OrderList),包含字段

ID(订单编号),

Name(订单名称),

Money(产生金额),

Autor(订单人),

AddTime(产生时间),

现在已经使用DataSet 将所有的订单结果显示在 管理员 界面,如果一天产生了相当数量的订单,很明显我们再去使用DataSet时中foreach或者for循环计算出当天订单总价或者部分订单价格,就对系统造成不小的负担。

解决办法,使用DataTable中的Compute函数解决。

DataTable[从元数据] 描述如下:

//
// 摘要:
//     计算用来传递筛选条件的当前行上的给定表达式。
//
// 参数:
//   expression:
//     要计算的表达式。
//
//   filter:
//     要限制在表达式中进行计算的行的筛选器。
//
// 返回结果:
//     System.Object,设置为计算结果。
public object Compute(string expression, string filter);

计算当前OrderList表中金额和并显示在Label1标签上:

DataSet ds = new DataSet();//初始化DataSet
ds = bll.GetAllOrderList(" and 1=1 order by AddTime");
//    这样在三层架构中可以调用bll层和dal层的方法,另外可以在这里添加更多查询约束,
//如果再在页面加载时调用的话 就可以轻松实现更多细节查询功能
Label1.Text = ds.Tables[0].Compute("Sum(Money)", "").ToString();
//这样就能够计算出所有 Money 列的总和

效果图:

这样,在统计中我们就可以用到,同样,你可以把:

Label1.Text = ds.Tables[0].Compute("Sum(Money)", "").ToString();

类似改为

Label1.Text = ds.Tables[0].Compute("Count(ID)", "").ToString();

来计算产生的订单数量,对于统计看来是一个不错的选择。

退出移动版