方法 : グループ化操作でサブクエリを実行する (C# プログラミング ガイド)
更新 : 2007 年 11 月
ここでは、2 つの異なる方法を使用して、参照元データをグループ単位で並べ替え、各グループに対して個別にサブクエリを実行するクエリを作成します。ソース要素をグループ化するために各例で使用する基本的な方法は、newGroup という名前の新しい継続を使用し、newGroup に対する新しいサブクエリを生成するというものです。このサブクエリは、外部クエリによって作成される新しいグループのそれぞれに対して実行されます。この例では、最終的な出力はグループではなく、匿名型のフラットなシーケンスです。
グループ化の方法の詳細については、「group 句 (C# リファレンス)」を参照してください。
継続の詳細については、「into (C# リファレンス)」を参照してください。次の例では、インメモリ データ構造をデータ ソースとして使用していますが、任意の種類の LINQ データ ソースで同じ基本原則が当てはまります。
使用例
private static void QueryMax()
{
var queryGroupMax =
from student in students
group student by student.Year into studentGroup
select new
{
Level = studentGroup.Key,
HighestScore =
(from student2 in studentGroup
select student2.ExamScores.Average()).Max()
};
int count = queryGroupMax.Count();
Console.WriteLine("Number of groups = {0}", count);
foreach (var item in queryGroupMax)
{
Console.WriteLine(" {0} Highest Score={1}", item.Level, item.HighestScore);
}
}
コードのコンパイル方法
次の例には、「方法 : オブジェクトのコレクションを照会する (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 プロジェクトを作成する」を参照してください。