首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Linq 怎么按时间分组?比较急望赐教,以后再学基本功!

2012-12-14 
Linq 如何按时间分组?比较急,望赐教,以后再学基本功!!!ListAFileTools.Model.ItemDataBase lst new Li

Linq 如何按时间分组?比较急,望赐教,以后再学基本功!!!

List<AFileTools.Model.ItemDataBase> lst = new List<AFileTools.Model.ItemDataBase>();
lst.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-1 20:00:00", Value = "1.1" });
lst.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-1 21:00:00", Value = "2.2" });
lst.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-2 20:00:00", Value = "3.1" });
lst.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-2 21:00:00", Value = "111.1" });


当前数据是年-月-日-小时

如何按 年-月-日 分组,都来看看。
[最优解释]

List<Model.ItemDataBase> lstData = new List<AFileTools.Model.ItemDataBase>();
            lstData.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-1 20:00:00", Value = "1.1" });
            lstData.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-1 21:00:00", Value = "2.2" });
            lstData.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-2 20:00:00", Value = "3.1" });
            lstData.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-2 21:00:00", Value = "111.1" });

            IEnumerable<IGrouping<string, string>> query =
                from Data in lstData
                group Data by Data.DT.Substring(0, Data.DT.IndexOf(' ')) into g
                select g.Average(s => float.Parse(s.Value));


[其他解释]
linq
            //List<AFileTools.Model.ItemDataBase> lst = new List<AFileTools.Model.ItemDataBase>();
            //lst.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-1 20:00:00", Value = "1.1" });
            //lst.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-1 21:00:00", Value = "2.2" });
            //lst.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-2 20:00:00", Value = "3.1" });
            //lst.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-2 21:00:00", Value = "111.1" });

            var query = from q in db.GetList
                        group q by DateTime.Parse(q.DT).ToString("yyyy-MM-dd") into g


                        select new {DT=g.Key,Value=g.Sum(r=>float.Parse(r.NValue) ) };
            dataGridView1.DataSource=query.ToList();



类db
    public class db
    {
        string dT;
        string nValue;

        public string DT
        {
            set { dT = value; }
            get { return dT; }
        }

        public string NValue
        {
            set { nValue = value; }
            get { return nValue; }
        }

        public static List<db> GetList
        {
            get
            {
                return new List<db>() { 
                new db(){ DT = "2010-1-1 20:00:00", NValue = "1.1" },
                new db(){ DT = "2010-1-1 21:00:00", NValue = "2.2" },
                new db(){ DT = "2010-1-2 20:00:00", NValue = "3.1" },
                new db(){ DT = "2010-1-2 21:00:00", NValue = "111.1" }
            };
            }
        }
    }

[其他解释]
忘记说了,是按平均值分组。
[其他解释]
自己搞定了
List<Model.ItemDataBase> lstData = new List<AFileTools.Model.ItemDataBase>();
            lstData.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-1 20:00:00", Value = "1.1" });
            lstData.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-1 21:00:00", Value = "2.2" });
            lstData.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-2 20:00:00", Value = "3.1" });


            lstData.Add(new AFileTools.Model.ItemDataBase() { DT = "2010-1-2 21:00:00", Value = "111.1" });

            IEnumerable<IGrouping<string, string>> query =
                from Data in lstData
                group Data.Value by Data.DT.Substring(0, Data.DT.IndexOf(' '));

            foreach (IGrouping<string, string> q in query)
            {
                MessageBox.Show(q.Key);
                float avg = q.Average(s => float.Parse(s));
                MessageBox.Show(Utils.Utilitys.Round(avg, 1).ToString());
            }


[其他解释]
按平均值分组是什么意思?
[其他解释]
平均值从何而来。。
[其他解释]
引用:
忘记说了,是按平均值分组。

            var query = from q in db.GetList
                        group q by DateTime.Parse(q.DT).ToString("yyyy-MM-dd") into g
                        select new {DT=g.Key,Value=g.Average(r=>float.Parse(r.NValue) ) };
            dataGridView1.DataSource=query.ToList();

热点排行