중첩 그룹 만들기

다음 예제에서는 LINQ 쿼리 식에서 중첩 그룹을 만드는 방법을 보여 줍니다. 학년 또는 성적 수준에 따라 만들어진 각 그룹은 개인의 이름에 따라 하위 그룹으로 추가로 구분됩니다.

예시

참고 항목

이 항목의 예제에서는 쿼리의 샘플 코드에서 개체 컬렉션의 클래스와 students 목록을 사용합니다Student.

var nestedGroupsQuery =
    from student in students
    group student by student.Year into newGroup1
    from newGroup2 in
    from student in newGroup1
    group student by student.LastName

    group newGroup2 by newGroup1.Key;

foreach (var outerGroup in nestedGroupsQuery)
{
    Console.WriteLine($"DataClass.Student Level = {outerGroup.Key}");
    foreach (var innerGroup in outerGroup)
    {
        Console.WriteLine($"\tNames that begin with: {innerGroup.Key}");
        foreach (var innerGroupElement in innerGroup)
        {
            Console.WriteLine($"\t\t{innerGroupElement.LastName} {innerGroupElement.FirstName}");
        }
    }
}

/* Output:
    DataClass.Student Level = SecondYear
            Names that begin with: Adams
                    Adams Terry
            Names that begin with: Garcia
                    Garcia Hugo
            Names that begin with: Omelchenko
                    Omelchenko Svetlana
    DataClass.Student Level = ThirdYear
            Names that begin with: Fakhouri
                    Fakhouri Fadi
            Names that begin with: Garcia
                    Garcia Debra
            Names that begin with: Tucker
                    Tucker Lance
    DataClass.Student Level = FirstYear
            Names that begin with: Feng
                    Feng Hanying
            Names that begin with: Mortensen
                    Mortensen Sven
            Names that begin with: Tucker
                    Tucker Michael
    DataClass.Student Level = FourthYear
            Names that begin with: Garcia
                    Garcia Cesar
            Names that begin with: O'Donnell
                    O'Donnell Claire
            Names that begin with: Zabokritski
                    Zabokritski Eugene
 */

중첩 그룹의 내부 요소를 반복하려면 세 개의 중첩 foreach 루프가 필요합니다.
(반복 변수 outerGroupinnerGroupinnerGroupElement 위에 마우스 커서를 놓고 실제 형식을 확인합니다.)

참고 항목