首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
利用DataTable.Compute等方法和属性做各种统计(某一列的总和sum、不重复的某列记录数distinct)
所属栏目:ASP.NET(webform)  时间:2010-08-05 11:24  作者:狼子

对应sql语句

select UserID, UserName, UserMoney from Users

从数据库里利用SqlDataAdapter读取出DataSet的方法不写了,这个好简单,写统计的办法

using (DataTable dt = ds.Tables[0])
        {
            //三个变量分别记录总记录数、不重复的用户数、所有用户的金额总额
            int rowsCount, distinctUserRowsCount, AllUserMoney;
            rowsCount = dt.Rows.Count;
            distinctUserRowsCount = dt.DefaultView.ToTable(true, new string[1] { "UserName" }).Rows.Count;
            AllUserMoney = Convert.ToDecimal(dt.Compute("sum(UserMoney)", ""));
        }

用DataView的ToTable方法统计不好的地方在不能带条件,如果要带条件,还要对这个结果集用Select方法过虑数据,再计算不重复的数据,比如统计UserID<10的用户数:

using (DataTable dtDistinct = new DataTable())
            {
                //添加两个列
                dtDistinct.Columns.Add(new DataColumn("UserID", dt.Columns["UserID"].DataType));
                dtDistinct.Columns.Add(new DataColumn("UserName", dt.Columns["UserName"].DataType));
               
                //把符合条件的数据加入dtDistinct准备用于计算
                foreach (DataRow dr in dt.Select("UserID<10"))
                {
                    dtDistinct.Rows.Add(new object[] { Convert.ToInt32(dr["UserID"]), dr["UserName"].ToString() });
                }

                //计算不重复的数据
                countUserName = dtDistinct.DefaultView.ToTable(true, new string[] { "UserName" }).Rows.Count;
            }

也可以把DataTable中的各行排序后,用循环来统计不重复记录数的:

            string lastUserName = "";
            foreach (DataRow dr in dt.Select("", "UserName"))
            {
                if (!lastUserName.Equals(dr["UserName"].ToString()))
                {
                    distinctUserRowsCount++;
                    lastUserName = dr["UserName"].ToString();
                }
            }


 

小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字皖ICP备06000023号-17