Select 句は、返される要素の形式および内容を指定します。たとえば、完全な Customer オブジェクト、1 つの Customer プロパティのみ、プロパティのサブセット、さまざまなデータ ソースからのプロパティの組み合わせ、計算に基づいた新しい結果の種類のいずれから結果が構成されるかを指定できます。Select 句がソース要素のコピー以外を生成する場合、その操作は投影と呼ばれます。
完全な Customer オブジェクトで構成されるコレクションを取得するには、範囲変数自体を選択します。
Dim londonCusts2 = From cust In customers _
Where cust.City = "London" _
Order By cust.Name Ascending _
Select cust
Customer インスタンスが多数のフィールドを持つ大きいオブジェクトで、名前のみを取得すればよい場合は、次の例に示すように cust.Name を選択できます。この場合、ローカル型の推論によって、結果の種類が Customer オブジェクトのコレクションから文字列のコレクションに変更されることが認識されます。
Dim londonCusts3 = From cust In customers _
Where cust.City = "London" _
Order By cust.Name Ascending _
Select cust.Name
データ ソースから複数のフィールドを選択するには、次の 2 つの方法があります。
Select 句で、結果に含める各フィールドを指定します。コンパイラは、それらのフィールドをプロパティとして持つ匿名型を定義します。詳細については、「匿名型」を参照してください。
次の例で返される要素は匿名型のインスタンスであるため、コード内で型を名前で参照することはできません。コンパイラによって指定される型の名前には、通常の Visual Basic コードでは無効な文字が含まれます。次の例では、londonCusts4 のクエリが返すコレクション内の各要素は匿名型のインスタンスです。
Dim londonCusts4 = From cust In customers _
Where cust.City = "London" _
Order By cust.Name Ascending _
Select Name = cust.Name, Phone = cust.Phone
For Each londonCust In londonCusts4
Console.WriteLine(londonCust.Name & " " & londonCust.Phone)
Next
または
結果に含める特定のフィールドを格納する名前付きの型を定義し、Select 句で型のインスタンスを作成および初期化します。この方法は、コレクション内に返された個々の結果を、そのコレクションの外部で使用する必要がある場合、またはメソッド呼び出しのパラメータとして渡す必要がある場合にのみ使用します。次の例では、londonCusts5 の型は IEnumerable(Of NamePhone) になります。
Public Class NamePhone
Public Name As String
Public Phone As String
' Additional class elements
End Class
Dim londonCusts5 = From cust In customers _
Where cust.City = "London" _
Order By cust.Name Ascending _
Select New NamePhone With {.Name = cust.Name, _
.Phone = cust.Phone}
Visual Basic で Select 句を使用する方法の詳細については、「Select 句 (Visual Basic)」を参照してください。