C # Triple Nested Linq Group - PullRequest
       2

C # Triple Nested Linq Group

4 голосов
/ 26 мая 2011

У меня есть проблема, которую я упростила и почесывала голову.Если у меня есть список студентов, и я хочу использовать LINQ для создания группы студентов по возрасту, классу и фамилии, чтобы я мог обойти их с помощью вложенного цикла foreach, как бы я поступил так.Вот некоторый код:

class Student
    {
        public int Grade;
        public int Age;
        public string LastName;
    }

    public void SomeMethod()
    {
        Student student1 = new Student() { Age = 10, Grade = 100, LastName = "Smith"};
        Student student2 = new Student() { Age = 10, Grade = 90, LastName = "Jones" };
        Student student3 = new Student() { Age = 10, Grade = 50, LastName = "Bob" };
        Student student4 = new Student() { Age = 10, Grade = 100, LastName = "Smith" };
        Student student5 = new Student() { Age = 11, Grade = 10, LastName = "Bob" };
        Student student6 = new Student() { Age = 11, Grade = 30, LastName = "Jones" };
        Student student7 = new Student() { Age = 13, Grade = 90, LastName = "Bob" };
        Student student8 = new Student() { Age = 13, Grade = 90, LastName = "Smithy" };
        Student student9 = new Student() { Age = 15, Grade = 100, LastName = "Smith" };
        Student student10 = new Student() { Age = 15, Grade = 0, LastName = "Smith" };

        List<Student> studentList = new List<Student>()
                                     {
                                         student1,student2,student3,student4,student5,student6,student7,student8,student9,student10
                                     };

        var studentGroups = from student in studentList
                            group student by student.Age into studentAgeGroup
                            from studentAgeGradeGroup in
                                              (
                                                  from student in studentAgeGroup
                                                  group student by student.Grade
                                              )
                            group studentAgeGradeGroup by studentAgeGroup.Key;

        foreach (var ageGroup in studentGroups)
        {                
            foreach (var gradeGroup in ageGroup)
            {
                foreach (var innerGroupElement in gradeGroup)
                {
                     // At this point they are grouped by age and grade but I would also like them to be grouped by LastName
                }
            }
        }
    }

Ответы [ 3 ]

5 голосов
/ 26 мая 2011

Как насчет?

var studentGroups = from student in studentList
            group student by new {student.Age, student.Grade, student.LastName};

и циклически просматривая каждый элемент в studentGroups, вы можете получить доступ к Age по sg.Key.Age и так далее.

2 голосов
/ 26 мая 2011

, чтобы я мог пройти их с помощью вложенного цикла foreach, как бы я поступил так.

1 голос
/ 26 мая 2011

Почему бы не сгруппировать их сразу?

var studentGroups = from student in studentList 
                    group student by new { student.Age, student.Grade, student.LastName } 
                    into studentAgeGroup 
                    select studentAgeGroup;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...