English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

LINQ メソッド構文

前のセクションでは、LINQクエリ文法について学びました。ここでは、メソッド文法について学びます。

メソッド文法(連続文法とも呼ばれます)は、EnumerableやQueryable静的クラスに含まれる拡張メソッドを使用します。これは、あなたがどのクラスの拡張メソッドを呼び出すかと同じ方法です。  

コンパイラは、クエリ文法をメソッド文法にコンパイルします。

以下はLINQメソッド文法クエリのサンプルです。このクエリは「Tutorials」という単語を含む文字列コレクションを返します。

// 文字列コレクション
IList<string> stringList = new List<string>() { 
    "C# Tutorials",
    "VB.NET Tutorials",
    "Learn C++",
    "MVC Tutorials" ,
    "Java" 
};
// LINQクエリ文法
var result = stringList.Where(s => s.Contains("Tutorials"));

以下の図はLINQメソッド文法の構造を示しています。

LINQメソッド文法の構造

上の図のように、メソッド文法には拡張メソッドとLambda式が含まれています。拡張メソッドは、Enum(Enum)クラスで定義されていますWhere ()。

Where拡張メソッドのシグネチャを確認すると、Whereメソッドが1つの引数を受け取ることがわかります。 predicateデリゲート Func<Student,bool>。これは、Studentオブジェクトを引数に取り、布尔値を返すデリゲート関数を渡すことができることを意味します。以下の図のように、lambda式はWhere子句に渡されるデリゲートとして使用されます。次のセクションでLambda式を学びます。

Where内のFuncデリゲート

以下のサンプルでは、LINQメソッド文法クエリとIEnumerable <T>コレクションを一緒に使用する方法を示します。

// 学生コレクション
IList<Student> studentList = new List<Student>() { 
        new Student() { StudentID = 1, StudentName = "John", Age = 13}
        new Student() { StudentID = 2, StudentName = "Moin",  Age = 21 }
        new Student() { StudentID = 3, StudentName = "Bill", Age = 18 }
        new Student() { StudentID = 4, StudentName = "Ram", Age = 20},
        new Student() { StudentID = 5, StudentName = "Ron", Age = 15 } 
    };
// LINQメソッド構文で青少年学生を見つける
var teenAgerStudents = studentList.Where(s => s.Age > 12 && s.Age < 20)
                                  .ToList<Student>();
// 学生コレクション
Dim studentList = New List(Of Student) From {
        New Student() With {.StudentID = 1, StudentName = "John", Age = 13}
        New Student() With {.StudentID = 2, StudentName = "Moin", Age = 21}
        New Student() With {.StudentID = 3, StudentName = "Bill", Age = 18}
        New Student() With {.StudentID = 4, StudentName = "Ram", Age = 20},
        New Student() With {.StudentID = 5, StudentName = "Ron", Age = 15}
    }
// LINQメソッド構文で青少年学生を見つける
Dim teenAgerStudents As IList(Of Student) = studentList.Where(Function(s) s.Age > 12 And s.Age < 20)
                                                       .ToList()

 覚えておくべきポイント

  1. その名の通りのメソッド構文拡張メソッドを呼び出すように見えます。

  2. LINQメソッド構文フラuent语法(連続的な语法)とも言います。それは、一連の拡張メソッド呼び出しを許可します。

  3. イミュートアブル型変数-varはLINQクエリの結果を保存するために使用できます。