Разницы нет. Компилятор выведет анонимный тип.
Скорее всего, вы хотите вернуть значение элементов, как в e.<Surname>.Value
, которое возвращает строку вместо XElement.
Ваш второй пример может быть упрощен как
Dim ee = From e In someXML.<Employee> _
Select e.<Surname>.Value, e.<Forename>.Value
потому что компилятор также выведет имена членов анонимного типа.
Однако, если у вас есть следующий класс
Class Employee
Private _surname As String
Public Property Surname() As String
Get
Return _surname
End Get
Set(ByVal value As String)
_surname = value
End Set
End Property
Private _forename As String
Public Property Forename() As String
Get
Return _forename
End Get
Set(ByVal value As String)
_forename = value
End Set
End Property
End Class
Тогда вы могли бы изменить 1-й запрос для получения IQueryable(Of Employee)
вместо анонимного типа, используя New ... С таким образом:
Dim ee = From e In someXML.<Employee> _
Select New Employee With {.Surname = e.<Surname>.Value, _
.Forename = e.<Forename>.Value}