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

求一段linq,该怎么解决

2013-07-04 
求一段linq本帖最后由 bettercong 于 2013-06-08 11:08:36 编辑我有一个list集合id班级姓名科目分数1一班

求一段linq
本帖最后由 bettercong 于 2013-06-08 11:08:36 编辑 我有一个list集合
id   班级  姓名  科目  分数
1   一班  张三   语文  100
2   一班  张三   数学  100    
3   一班  张三   外语  100
4   二班  李四   语文  95
5   二班  李四   数学  95
6   二班  李四   外语  95
7   二班  王五   语文  90
8   二班  王五   数学  90
9   二班  王五   外语  90
......

linq查询分组的结果如下:
id   班级  姓名  排名  总分
1    一班  张三  1     300
2    二班  李四  2     285
3    二班  王五  3     270

大致的意思就是大前提是班级,然后再是每个班级下把每个学生的总分排名
最后list集合就剩下这三条数据,或者算完之后再放到一个新的list集合里也可以

请问linq怎么做?
[解决办法]


     List<Student> list = new List<Student> 
            { 
             new Student{Classname="一班",Name="张三",Lesson="a",Score=100},
             new Student{Classname="一班",Name="张三",Lesson="b",Score=100},
             new Student{Classname="一班",Name="张三",Lesson="c",Score=100},
             new Student{Classname="二班",Name="李四",Lesson="a",Score=95},
             new Student{Classname="二班",Name="李四",Lesson="b",Score=95},
             new Student{Classname="二班",Name="李四",Lesson="c",Score=95},
              new Student{Classname="三班",Name="王五",Lesson="a",Score=90},
              new Student{Classname="三班",Name="王五",Lesson="b",Score=90},
              new Student{Classname="三班",Name="王五",Lesson="c",Score=90}
            };

            var query = list.GroupBy(x => x.Classname).Select(x=>new {ClassName=x.Key,Name=x.FirstOrDefault().Name,Total=x.Sum(p=>p.Score)});
            foreach (var item in query)
            {
                Console.WriteLine("班级:{0}  名字:{1}  总分:{2}",item.ClassName,item.Name,item.Total);


            }


[解决办法]

 int i = 1;
            var query = (from l in list
                         group l by new { l.stuclass, l.name } into g
                         select new Student
                             {
                                 id = i++,
                                 stuclass = g.Key.stuclass,
                                 name = g.Key.name,
                                 score = g.Sum(x => x.score)
                             }).OrderByDescending(y => y.score);
            foreach (Student m in query)
            {
                Console.WriteLine(m.id + "\t" + m.stuclass + "\t" + m.name + "\t" + m.score);
            }

    
[解决办法]

 public class Student
        {
            public int id { get; set; }
            public string stuclass { get; set; }
            public string name { get; set; }
            public string subject { get; set; }
            public float score { get; set; }
        }
        static void Main(string[] args)
        {
            /*
             
 id   班级  姓名  科目  分数


1   一班  张三   语文  100
2   一班  张三   数学  100    
3   一班  张三   外语  100
4   二班  李四   语文  95
5   二班  李四   数学  95
6   二班  李四   外语  95
7   二班  王五   语文  90
8   二班  王五   数学  90
9   二班  王五   外语  90
             */
            List<Student> list = new List<Student>() {
                new Student { id = 1, stuclass = "一班", name = "张三", subject = "语文", score = 100 }, 
                new Student { id = 2, stuclass = "一班", name = "张三", subject = "数学", score = 100 }  , 
                new Student { id = 3, stuclass = "一班", name = "张三", subject = "外语", score = 100 }  , 
                new Student { id = 4, stuclass = "二班", name = "李四", subject = "语文", score = 95 }
                , 
                new Student { id = 5, stuclass = "二班", name = "李四", subject = "数学", score = 95 }
                , 
                new Student { id = 6, stuclass = "二班", name = "李四", subject = "外语", score = 95 }

                , 
                new Student { id = 7, stuclass = "二班", name = "王五", subject = "语文", score = 90 }
                , 
                new Student { id = 8, stuclass = "二班", name = "王五", subject = "数学", score = 90 }
                , 
                new Student { id = 9, stuclass = "二班", name = "王五", subject = "外语", score = 90 }
            };


            int i = 1;
            var query = (from l in list
                         group l by new { l.stuclass, l.name } into g
                         select new Student
                             {
                                 id = i++,
                                 stuclass = g.Key.stuclass,
                                 name = g.Key.name,
                                 score = g.Sum(x => x.score)
                             }).OrderByDescending(y => y.score);
            foreach (Student m in query)
            {
                Console.WriteLine(m.id + "\t" + m.stuclass + "\t" + m.name + "\t" + m.score);
            }
 }


[解决办法]

public struct 成绩
        {
            public int id;
            public string 班级;
            public string 姓名;
            public string 科目;
            public int 分数;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            List<成绩> 成绩s = new List<成绩>();
            //张三
            成绩s.Add(new 成绩() { id = 1, 班级 = "一班", 姓名 = "张三", 科目 = "语文", 分数 = 100 });
            成绩s.Add(new 成绩() { id = 1, 班级 = "一班", 姓名 = "张三", 科目 = "数学", 分数 = 100 });


            成绩s.Add(new 成绩() { id = 1, 班级 = "一班", 姓名 = "张三", 科目 = "外语", 分数 = 100 });
            //李四
            成绩s.Add(new 成绩() { id = 1, 班级 = "二班", 姓名 = "李四", 科目 = "语文", 分数 = 95 });
            成绩s.Add(new 成绩() { id = 1, 班级 = "二班", 姓名 = "李四", 科目 = "数学", 分数 = 95 });
            成绩s.Add(new 成绩() { id = 1, 班级 = "二班", 姓名 = "李四", 科目 = "外语", 分数 = 95 });
            //王五
            成绩s.Add(new 成绩() { id = 1, 班级 = "二班", 姓名 = "王五", 科目 = "语文", 分数 = 90 });
            成绩s.Add(new 成绩() { id = 1, 班级 = "二班", 姓名 = "王五", 科目 = "数学", 分数 = 90 });
            成绩s.Add(new 成绩() { id = 1, 班级 = "二班", 姓名 = "王五", 科目 = "外语", 分数 = 90 });

            var results = from t in 成绩s group t by new { t.班级,t.姓名} into g select new {班级=g.Key.班级, 姓名 = g.Key.姓名, 

总分 = g.Sum(x => x.分数) };
            foreach (var result in results)
            {
                richTextBox1.Text += result.班级 + "," + result.姓名 + "," + result.总分 + "\n";
            }
        }

热点排行