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

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

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

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

new { ... }变成了

New With { ... } VB.NET中的New With { ... }

要么

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

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

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

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.prop1} 

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

看到:

匿名类型(C#编程指南)

匿名类型(Visual Basic)