更新 : 2007 年 11 月
次の条件が両方とも該当する場合、クエリ式で匿名型を使用します。
各ソース要素のプロパティの一部のみを返す必要がある。
クエリが実行されるメソッドのスコープの外側にクエリ結果を保存する必要がない。
各ソース要素から 1 つのプロパティまたはフィールドのみを返す必要がある場合、select 句でドット演算子を使用するだけでこれを行うことができます。たとえば、各 student の ID のみを返すには、次のように select 句を記述します。
select student.ID;
使用例
次の例に、匿名型を使用して、指定した条件に一致する各ソース要素のプロパティのサブセットのみを返す方法を示します。
private static void QueryByScore()
{
// Create the query. var is required because
// the query produces a sequence of anonymous types.
var queryHighScores =
from student in students
where student.ExamScores[0] > 95
select new { student.FirstName, student.LastName };
// Execute the query.
foreach (var obj in queryHighScores)
{
// The anonymous type's properties were not named. Therefore
// they have the same names as the Student properties.
Console.WriteLine(obj.FirstName + ", " + obj.LastName);
}
}
/* Output:
Adams, Terry
Fakhouri, Fadi
Garcia, Cesar
Omelchenko, Svetlana
Zabokritski, Eugene
*/
名前が指定されていない場合、匿名型では、そのプロパティのソース要素の名前が使用されることに注意してください。匿名型のプロパティに新しい名前を指定するには、次のように select ステートメントを記述します。
select new { First = student.FirstName, Last = student.LastName };
前の例でこれを行う場合、Console.WriteLine ステートメントも変更する必要があります。
Console.WriteLine(student.First + " " + student.Last);
コードのコンパイル方法
- このコードを実行するには、Visual Studio で作成した Visual C# コンソール アプリケーション プロジェクトに、クラスをコピーして貼り付けます。既定では、このプロジェクトは、.NET Framework Version 3.5 を対象としており、System.Core.dll への参照と System.Linq の using ディレクティブが含まれます。これらの要件が 1 つ以上プロジェクトから欠落していても、手動で追加できます。詳細については、「方法 : LINQ プロジェクトを作成する」を参照してください。