在实体框架中使用linq时出现类型转换错误

时间:2013-07-29 12:42:34

标签: sql-server linq entity-framework type-conversion

我正在尝试从SQL Server数据库中获取数据。

我的数据库中有一个名为Standard的表。它有三列StandardIDStandardNameDescription

我有一个组合框,我在其中填充StandardName

的值

以下是代码:

Using db As New SchoolDBEntities
    ComboSelectStandardToEdit.DataSource = db.Standards.ToList()
    ComboSelectStandardToEdit.ValueMember = "StandardID"
    ComboSelectStandardToEdit.DisplayMember = "StandardName"
End Using

现在我有两个名为txtStandardNametxtDescription的文本框。

我想根据组合框中选定的StandardName来填充这2个文本框的值。

这是我尝试过的代码:

Using db As New SchoolDBEntities
            Dim standard = From s In db.Standards
                            Where s.StandardId = CInt(ComboSelectStandardToEdit.SelectedValue)
                            Select s

            txtStandardName.Text = CType(standard, Standard).StandardName
        End Using

但不幸的是我收到了错误:

  

无法转换'System.Data.Entity.Infrastructure.DbQuery `1[EF_WinForms_VB.Standard]' to type 'EF_WinForms_VB.Standard'.

类型的对象

2 个答案:

答案 0 :(得分:2)

尝试使用

Dim standard = (From s In db.Standards
    Where s.StandardId = CInt(ComboSelectStandardToEdit.SelectedValue)
    Select s)
    .FirstOrDefault

txtStandardName.Text = standard.StandardName

您的Linq查询当前正在撤回可能包含多个条目的投影。通过明确请求投影的第一个对象,您无需在访问它的值之前转换标准。

答案 1 :(得分:1)

尝试使用

Dim standard =(来自s in db.Standards.AsEnumerable     其中s.StandardId = Convert.ToInt32(ComboSelectStandardToEdit.SelectedValue)     选择s)     .FirstOrDefault

txtStandardName.Text = standard.StandardName

希望它有所帮助。