在 LINQ 中按子句分组

本文关键字:子句 LINQ | 更新日期: 2023-09-27 18:35:18

我已经浏览了下面的代码,但不明白组子句如何进行分组

请帮忙.我是 c# 的新手。

public static List<Student> GetStudents()
        {
            // Use a collection initializer to create the data source. Note that each element 
            //  in the list contains an inner sequence of scores.
            List<Student> students = new List<Student>
        {
           new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= new List<int> {97, 72, 81, 60}},
           new Student {First="Claire", Last="O'Donnell", ID=112, Scores= new List<int> {75, 84, 91, 39}},
           new Student {First="Sven", Last="Mortensen", ID=113, Scores= new List<int> {99, 89, 91, 95}},
           new Student {First="Cesar", Last="Garcia", ID=114, Scores= new List<int> {72, 81, 65, 84}},
           new Student {First="Debra", Last="Garcia", ID=115, Scores= new List<int> {97, 89, 85, 82}} 
        };
            return students;
        }
List<Student> students = GetStudents();
            // Write the query. 
            var studentQuery =
                from student in students
                let avg = (int)student.Scores.Average()
                group student by (avg == 0 ? 0 : avg / 10);

我不明白学生查询是如何生成的。提前谢谢.

在 LINQ 中按子句分组

分组是指将数据分组的操作,以便每个组中的元素共享一个公共属性。GroupBy将学生分为几组——平均 0-9、10-19、20-29、30-39 等。你应该看看http://msdn.microsoft.com/en-us//library/bb546139.aspx

附言

 group student by (avg == 0 ? 0 : avg / 10);

对我来说似乎有些过分。您可以将其更改为更简单

 group student by (avg / 10);

pps:我更喜欢另一种风格的 LINQ,但这完全是个人选择。另一种风格是

var studentQuery = students.GroupBy(x => x.Scores.Average() / 10);