错误:Cast System.Data.Objects.ObjectQuery

时间:2012-08-09 18:27:40

标签: asp.net-mvc vb.net linq asp.net-web-api

我正在尝试查询我的EF模型(使用ASP.NET MVC WebApi),但只有第一个版本(使用SingleOrDefault)工作而不是第二个版本,我无法理解它!

工作:

Public Overloads Shared Function GetById(id As Integer) As MEDIA
    Dim db As New EFEntities()
    Dim r As New MEDIA()
    r = db.MEDIA.SingleOrDefault(Function(p) p.id = id)

    Return r
End Function

不工作:

错误:无法将类型为'System.Data.Objects.ObjectQuery`1 [Data.MEDIA]'的对象强制转换为'Data.MEDIA'

Public Overloads Shared Function GetById(id As Integer) As MEDIA
    Dim db As New EFEntities()
    r = From media In db.MEDIA
            Where media.id= id _
            Select media

    Return r
End Function        

如果有人能告诉我如何让第二版运行并解释问题所在,我真的很感激!

1 个答案:

答案 0 :(得分:0)

在您的第一个示例中,行:

r = db.MEDIA.SingleOrDefault(Function(p) p.id = id)

初始化单个MEDIA对象。

然而,在第二个例子中,行:

r = From media In db.MEDIA
        Where media.id= id _
        Select media

初始化一组MEDIA对象 - 不兼容的类型。

如果您在第二个示例中将返回表达式更改为:

Return r.SingleOrDefault()

并在Dim的初始化之前坚持r它将起作用。