日期:2014-05-17  浏览次数:20807 次

datatable.compute 函数 很慢?

object PAY_AMT_SUM = null;

            foreach (DataRow dr in dtSel.Rows)
            {
                empCD = dr["EMP_CD"].ToString();
                PAY_AMT_SUM = dtSel.Compute("Sum(PAY_AMT)", " EMP_CD = '" + empCD + "'");

                dr["PAY_AMT_SUM"] = PAY_AMT_SUM;
            }



datatable dtSel的数据 4千件,很慢。。。
没有别的方法解决吗?

请指教。。

------解决方案--------------------
用sql算 别在内存里算
------解决方案--------------------
你那个添加一个表达式列就行了(相当于SQL中的计算列)
http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression(v=vs.80).aspx
或者用Linq
------解决方案--------------------
肯定的你循环了4000多条。这类的计算,可以在数据库中用sql算。
------解决方案--------------------
var query=from d in dtSel.AsEnumerable()
          group d by d.Field<string>("EMP_CD") into g
          select new 
{
  Key=g.Key,
  PAY_AMT_SUM=g.Sum(x=>x.Field<int>("PAY_AMT"))
}