VB Linq中的"New ... With"语法有什么作用?

Ste*_*ies 18 linq vb.net linq-to-xml

什么(如果有的话)是这个VB Linq查询的以下两个版本的结果之间的差异?

'假设我们有一个XElement,其中包含在其他地方定义的员工详细信息

Dim ee = From e In someXML.<Employee> _
Select New With {.Surname = e.<Surname>, .Forename = e.<Forename>}
Run Code Online (Sandbox Code Playgroud)

Dim ee = From e In someXML.<Employee> _
Select Surname = .Surname = e.<Surname>, .Forename = e.<Forename>
Run Code Online (Sandbox Code Playgroud)

即什么是新的...有语法?

我怀疑这有一个简单的答案,但我找不到 - 任何指向合适教程或Microsoft文档的链接都将受到赞赏.

Joe*_*orn 15

区别在于第1个显式创建了匿名类型.第二个是查询表达式,可以使用现有类型而不是创建匿名类型.来自Cameron MacFarland链接的文档:

查询表达式并不总是需要创建匿名类型.如果可能,他们使用现有类型来保存列数据.当查询从数据源返回整个记录或每个记录只返回一个字段时,会发生这种情况.


And*_*kin 5

我的理解是没有区别。

New With旨在查询之外的使用,例如

Dim X = New With { .Surname = "A", .Forename = "B" }
Run Code Online (Sandbox Code Playgroud)

特别是对于 Linq 查询,您可以跳过New With,但它对于其他情况仍然有用。不过,我不确定,因为我不知道 VB 9 :)