none
这该如何计算平均值??? RRS feed

  • 问题



  • 1、数据库中的数据如图片中所示。

    2、数据库是SQLCE,不能使用SQL语句求平均值,不支持avg和groupby。

    3、现在要根据时间计算平均值,作为结果集。  也就是有时根据“2014-04-04”逐日计算, 有时根据“2014-04-04 18”逐分计算,有时根据“2014-04-04 18:22” 逐分钟计算。

    4、比如时间(datetime)有:
    “2014-01-25”、“2014-01-26”、“2014-01-27”、“2014-01-28”、“2014-01-29”、“2014-01-30”多个时间,每天的平均值要一次性计算出啊。  
    SQLCE4.0不支持计算平均值。 
    问题:
         1、C#代码如何实现这样的功能呢???         
         2、 SQLCE数据库不支持,能不能在“DataTable/DataSet”下实现这样的平均?    还是要转化List数据集合才可以。
         3、最好给点代码实例,谢谢。
            


    Science and technology is my lover.

    2014年4月18日 9:09

答案

  • 可以使用LINQ to DataSet来查询计算,以下是详细介绍

    http://msdn.microsoft.com/zh-cn/library/bb386977(v=vs.90).aspx

    示例代码如下:

                DataTable dt = new DataTable();
                dt.Columns.Add("pointcode").DataType = typeof(string);
                dt.Columns.Add("db").DataType = typeof(double);
                dt.Columns.Add("datetime").DataType = typeof(DateTime);
                dt.Rows.Add("LY07", 1.4603, new DateTime(2014, 4, 4, 18, 22, 04));
                dt.Rows.Add("LY08", 0.9328, new DateTime(2014, 4, 4, 18, 22, 04));
                dt.Rows.Add("LY11", 16.56, new DateTime(2014, 4, 4, 18, 22, 04));
    
                var result =
                    from r in dt.AsEnumerable()
                    group r by r.Field<DateTime>("datetime").ToString("yyyy-MM-dd") into g //按日期分组,如果要按小时分组,改成"yyyy-MM-dd HH"即可
                    select new
                    {
                        g.Key,
                        Average = g.Average(r => r.Field<double>("db"))
                    };
    
                foreach (var item in result)
                {
                    Console.WriteLine("group: " + item.Key + ", avg: " + item.Average);
                }

    2014年4月18日 9:51