测试数据:

           class Student
           {
               public string Name { get; set; }
               public int Score { get; set; }
            }
            List<Student> students = new List<Student>{
               new Student {Name="Terry", Score=50},          
               new Student {Name="Tom", Score=85},
               new Student {Name="Wade", Score=90},
               new Student {Name="James", Score=70},
               new Student {Name="Kobe", Score=90},
               new Student {Name="AK", Score=90},             
            };

 

1.OrderBy

可以指定多个排序的值,以便执行一个或多个次要排序操作。

对分数进行降序排序,然后再将分数相同的学生姓名进行升序排列(分数为主要排序,姓名为次要排序):

            var query = from student in students
                        orderby student.Score descending, student.Name
                        select student;
            foreach (var student in query)
            {
                Console.WriteLine("{0}:{1}", student.Name, student.Score);
                //AK:90
                //Kobe:90
                //Wade:90
                //Tom:85
                //James:70
                //Terry:50
            }

 

 2.Group By

在这种情况下,第一个字母是键且具有 char 类型,并且存储在每个 IGrouping<TKey, TElement> 对象的Key属性中。

按照学生分数分组:

            var query = from student in students
                        group student by student.Score;
            foreach (var studentGroup in query)
            {
                //studentGroup推断为IGrouping<int,Student>类型
                Console.WriteLine("{0}", studentGroup.Key);
                //50
                //85
                //90
                //70
            }

 

(2)说明:group 子句结束该查询。

查询每个分数组中的每个学生的信息:

            var query = from student in students
                        group student by student.Score into g
                        select g;
            foreach (var studentGroup in query)
            {
                Console.WriteLine("分数组:{0}", studentGroup.Key);
                foreach (var student in studentGroup)
                {
                    Console.Write("{0}:{1},", student.Name,student.Score);
                }
                Console.WriteLine();
                //分组:50
                //Terry:50,
                //分组:85
                //Tom:85,
                //分组:90
                //Wade:90,Kobe:90,AK:90,
                //分组:70
                //James:70,
            }

 

(3)同样的,group 子句可按照任何类型进行分组,如字符串、内置数值类型、用户定义的命名类型或匿名类型。形式差不多,有需要可查阅其他资料

 

关注
 
 

相关文章: