Первый оператор в коде включает следующее лямбда-выражение:
Function(q) New With
{
q.EID,
.Name = q.Lastname & ", " & q.Firstname
}
Он генерирует анонимный тип с полем Integer (EID) и полем String (Name).Это VB$AnonymousType_11(Of Integer,String)
, которое вы видите в сообщении об ошибке.Эти значения назначаются комбинированному списку, и поэтому, когда вы смотрите на SelectedValue
для ComboBox, это тип значения, с которым вы работаете.
Так что вам нужно сделать следующее:
Dim EmployeeID As Integer = cbxEmployee.SelectedValue.EID
ДАЖЕ ЛУЧШЕ
Это работает только потому, что Option Strict
выключен, а очень плохо .Это приводит ко всем видам ошибок времени выполнения.Вы должны включить Option Strict.Это может вызвать кучу новых ошибок в вашем коде, но каждая из них на самом деле - небольшая бомба замедленного действия, ожидающая взлета.Это дает вам возможность исправить эти ошибки сейчас, прежде чем они вызовут проблему для ваших пользователей.Вы получите лучший, более быстрый код, который легче поддерживать.
В этом случае это может означать определение Class
для этих объектов списка, что кажется большой проблемой, но на самом деле это всего лишь четыре строки кода:
Public Class EmployeeListItem
Public Property EID As Integer
Public Property Name As String
End Class
Тогда я быдалее установите элементы DisplayMember и ValueMember перед назначением источника данных.Объедините с другими исправлениями, и вы получите следующее:
Dim list = MyContext.Employees.
Where(Function(q) q.Status = True).
Select(Function(q) New EmployeeListItem With
{
q.EID,
.Name = q.Lastname & ", " & q.Firstname
}).
OrderBy(Function(x) x.Name)
With cbxEmployee
.DisplayMember = "Name"
.ValueMember = "EID"
.DataSource = list
End With
Обратите внимание, мне никогда не приходилось звонить ToList()
.Это уменьшает использование памяти, и в некоторых случаях может сделать код значительно более эффективным.
Затем, при использовании значения, вы хотите привести его, например:
Dim EmployeeID As Integer = DirectCast(cbxEmployee.SelectedValue, EmployeeListItem).EID