2011-06-14 4 views
2

私はDTO、Departmentのコレクションを持っており、すべてのDepartmentオブジェクトの列の1つだけを抽出したいと考えています。私の理解からアウトVB.NETでのLinq/lambdasの混乱

List<Department> departments = corporation.GetDepartments(); 
List<int> departmentIDs = departments.ConvertAll(dep => dep.ID); 

これはConvertAll(引数でLINQを使用すること、である)ラムダ式であること:私はC#で、あなたはこのように行うことができることを知っています。 VBで同じことを達成しようとすると

、それは1のコンバータ・メソッドを定義しなければならないようだ(?):

Dim departmentIDs As List(Of Integer) = coll.ConvertAll(New Converter(Of Department, Integer)(AddressOf ConvertDepartmentToInt)) 

Public Shared Function ConvertDepartmentToInt(ByVal dep As Department) As Integer 
    Return dep.ID 
End Function 

なぜそれがこのようなものですか?何か不足していますか?

答えて

7

Visual Basic .NETでもlambdaを使用できます。構文は次のようである:(タイプAction<int>のそれらのような)値を返しませんラムダのために

departments.ConvertAll(Function(dep) dep.ID) 

は、代わりにSubを使用します。

Sub(x) Console.WriteLine(x) 
+0

感謝を!この構文は、C#構文よりも文書化されていないようです。たぶんC#の人気のために.. –