我正在尝试使用下面的代码行从EF数据库模型中取回一个..
Dim _classRoom As classrm = db.classrms.Select(Function(b) b.Course_ID = _CurrCourse.course_ref)
其中classrm是实体的名称,db声明为新实体。我要做的是根据匹配的Course_ID从实体中选择一行,在此模型中是一个字符串。这样我以后可以使用变量_classRoom从同一行中获取其他项目。但是我收到以下错误:
Unable to cast object of type 'System.Data.Objects.ObjectQuery`1[System.Boolean]' to type 'Trial_Online.classrm'.
任何人有任何想法???我必须与几个不同的实体预先形成类似的任务,但如果我指向正确的方向,我可以从那里管理......
答案 0 :(得分:4)
使用Where
代替Select
来过滤结果,并在结尾添加First()
或Single()
:
Dim _classRoom As classrm = db.classrms.Where(Function(b) b.Course_ID = _CurrCourse.course_ref).First()
First()
和Single()
之间的区别在于,如果结果中有多个元素,Single()
将抛出异常。如果结果序列为空,则两者都将抛出异常。
如果没有结果,您还可以使用FirstOrDefault()
和SingleOrDefault()
返回Nothing
。
答案 1 :(得分:1)
对VB.NET中的查询语法不太熟悉,但在C#中我很确定你必须在查询结尾添加First()
或Single()
才能将结果投影到一个对象实例。否则我认为你得到一个结果集(可能是一个IQueryable
对象)。