方法 : グループをグループ化する (C# プログラミング ガイド)
更新 : 2007 年 11 月
LINQ クエリ式で入れ子になったグループを作成する方法を次の例に示します。
使用例
private static void QueryNestedGroups()
{
var queryNestedGroups =
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 queryNestedGroups)
{
Console.WriteLine("DataClass.Student Level = {0}", outerGroup.Key);
foreach (var innerGroup in outerGroup)
{
Console.WriteLine("\tNames that begin with: {0}", innerGroup.Key);
foreach (var innerGroupElement in innerGroup)
{
Console.WriteLine("\t\t{0} {1}", innerGroupElement.LastName, innerGroupElement.FirstName);
}
}
}
}
入れ子になったグループの内部の要素を反復処理するために、3 つの入れ子になった foreach ループが必要です。
コードのコンパイル方法
この例には、「方法 : オブジェクトのコレクションを照会する (C# プログラミング ガイド)」のサンプル アプリケーションで定義されているオブジェクトへの参照があります。このメソッドをコンパイルして実行するには、メソッドをそのアプリケーションの StudentClass クラスに貼り付け、Main メソッドからそのメソッドを呼び出すコードを追加します。
独自のアプリケーションに合わせてこのメソッドを変更する場合、LINQ には .NET Framework Version 3.5 が必要なこと、および System.Core.dll への参照と System.Linq の using ディレクティブをプロジェクトに含める必要があることに注意してください。LINQ to SQL、LINQ to XML、および LINQ to DataSet の場合は、追加の using と参照も必要です。詳細については、「方法 : LINQ プロジェクトを作成する」を参照してください。