先给一个小例子,假设我们要查询一张 订单表(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();
来计算产生的订单数量,对于统计看来是一个不错的选择。