日期:2014-05-20  浏览次数:20667 次

求一段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);