创建嵌套组

以下示例演示如何在 LINQ 查询表达式中创建嵌套组。 首先根据学生年级创建每个组,然后根据每个人的姓名进一步细分为小组。

示例

注意

本主题中的示例使用查询对象集合中的示例代码中的 Student 类和 students 列表。

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;

// Three nested foreach loops are required to iterate
// over all elements of a grouped group. Hover the mouse
// cursor over the iteration variables to see their actual type.
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
 */

请注意,需要使用 3 个嵌套的 foreach 循环来循环访问嵌套组的内部元素。

请参阅