在 lambda 表达式中选择多个字段

rue*_*edi 1 linq vb.net

我读了一本 linq 书,但不明白为什么

customers.where(function(x) x.city = "London").Select(function(y) new with{y.CompanyName, y.Country})
Run Code Online (Sandbox Code Playgroud)

有效(创建一个匿名类型,我明白了)但是

customers.where(function(x) x.city = "London").select(function(y) y.countryname, y.country)
Run Code Online (Sandbox Code Playgroud)

不起作用。难道不能在选择查询中选择多个字段吗?

Tim*_*ter 5

原因是:第二个不是创建匿名类型的有效语法。

所以这:

new with{y.CompanyName, y.Country} 
Run Code Online (Sandbox Code Playgroud)

创建一个具有两个属性的匿名类型,而这

y.countryname, y.countr 
Run Code Online (Sandbox Code Playgroud)

除了编译器错误之外什么也没有产生。

如果您创建一个类Company并提供一个构造函数,例如:

Public Class Company
    Public Sub New(companyName As String, countryName As String)
        Me.Country = countryName
        Me.Name = companyName
    End Sub

    Public Country As String
    Public Name As String
End Class
Run Code Online (Sandbox Code Playgroud)

现在您可以使用此语法来创建一个IEnumerable(Of Company)

Dim companies = customers.
    Where(Function(x) x.city = "London").
    Select(Function(x) New Company(x.CompanyName, x.Country))
Run Code Online (Sandbox Code Playgroud)

或者在查询语法中(我更喜欢 VB 中的语法):

Dim companies = From c In customers
                Where c.City = "London"
                Select New Company(c.CompanyName, c.Country)
Run Code Online (Sandbox Code Playgroud)