在MVC 3 vb.net中使用EF选择单行

时间:2011-10-24 00:56:30

标签: asp.net-mvc vb.net asp.net-mvc-3 entity-framework

我正在尝试使用下面的代码行从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'.

任何人有任何想法???我必须与几个不同的实体预先形成类似的任务,但如果我指向正确的方向,我可以从那里管理......

2 个答案:

答案 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对象)。