LINQ语句中匿名类型的等效VB.NET语法是什么?

时间:2010-06-29 15:32:29

标签: c# .net vb.net linq anonymous-types

我正在尝试将一些C#LINQ代码翻译成VB.NET,并且我仍然坚持如何在VB.NET中声明一个匿名类型。

.Select(ci => 
    new { CartItem = ci, 
          Discount = DiscountItems.FirstOrDefault(di => di.SKU == ci.SKU) }) 

如何将C#的new { ... }语法翻译成VB.NET?

2 个答案:

答案 0 :(得分:33)

new { ... }变为

VB.NET中的

New With { ... }

New With {Key ... }如果您想使用Key属性(允许您比较两个匿名类型实例但不允许更改这些属性的值)。

所以我猜你的陈述会是这样的:

.Select(Function(ci) New With {Key _
    .CartItem = ci, _
    .Discount = DiscountItems.FirstOrDefault(Function(di) di.SKU = ci.SKU) _
})

答案 1 :(得分:13)

C#:

new {name1 = "value1", name2 = "value2"}

VB等价物:

New With {Key .name1 = "value1", Key .name2 = "value2"}

此外,

C#:

new {anotherObj.prop1, anotherObj.prop2}

VB等价物:

New With {Key anotherObj.prop1, Key anotherObj.prop2}

注意:VB等价物中的Key关键字是必需的。在VB中指定时,属性变为只读并在Equal方法中进行检查。在C#中,匿名类型的所有属性都是只读的,并在Equal方法中检查。

请参阅:

Anonymous Types (C# Programming Guide)

Anonymous Types (Visual Basic)