没有为类型'Integer'和'IQueryable(Of Integer)'定义Operator'='

时间:2010-08-03 15:15:38

标签: vb.net linq asp.net-mvc-2

这令我头疼。我这里有这个链接查询,可以获取ID

Dim mclassID = From x In db.SchoolClasses Where x.VisitDateID = _visitdateID Select x.ClassID

然后我有这个linq查询

ViewData("Staff") = From t In db.Staffs Where t.ClassID = mclassID Select t

非常感谢任何帮助。我尝试过很多东西,但无济于事。我尝试过转换,转换,操作数等等。

6 个答案:

答案 0 :(得分:1)

问题是myClassID是匿名的IQueryable。您需要将其强制转换为另一种类型(List是我最喜欢的),然后将其拉出该类型。因此,如果您要将其选择为List(Of Integer),则可以提取First(),因为它将是唯一的。你可以尝试这样的事情:

Dim myClassIDList As List(Of Integer) = New List(Of Integer)( _
    From x In db.SchoolClasses Where x.VisitDateID = _visitdateID Select x.ClassID)

Dim myClassID as Integer = myClassIDList.First()

答案 1 :(得分:0)

只是一个猜测,但是在括号中包含等式的右边会有帮助吗?即:

ViewData("Staff") = (From t In db.Staffs Where t.ClassID = mclassID Select t)

答案 2 :(得分:0)

你应该改变这个

Dim mclassID = From x In db.SchoolClasses Where x.VisitDateID = _visitdateID Select x.ClassID

选择单个实例或第一个实例,否则它会作为报告执行,返回IEnumerable,这会导致您的错误。

或者你可以将你的第二个陈述改为

ViewData("Staff") = From t In db.Staffs Where mclassID.Contains(t.ClassID) Select t

利用mclassID作为IEnumerable的int。

答案 3 :(得分:0)

使用Select运算符,您可以返回多个结果。如果您只期望一个结果(即您通过主键选择),那么您可以使用SingleSingleOrDefault(取决于是否有保证会得到结果)来获得一个结果

Dim mclassID = (From x In db.SchoolClasses _
               Where x.VisitDateID = _visitdateID _
               Select x.ClassID).SingleOrDefault()

答案 4 :(得分:0)

如果设置了合适的选项,则可以在输出中看到错误: -

将VS2010菜单导航到工具/选项/项目和解决方案/构建和运行/
将MSBuild Project构建输出详细程度设置为“Detailed”

我有一个类似的错误没有显示在错误列表中,但是我看到这个选项设置: - 错误BC30452:未对类型的System.Nullable(Of Integer)和'Integer'定义运算符'='。 从这个声明: - 如果tqGDBChart.UserIsGroupAdmin(Userid,Groupid)= 0则“用户不是该组的组管理员”

使用中间变量轻松修复它。

Dim GroupAdminCount As Integer = tqGDBChart.UserIsGroupAdmin(Userid, Groupid)
If GroupAdminCount = 0 Then   'User is not a group admin for this group

答案 5 :(得分:-1)

你试过了吗?

ViewData("Staff") = From t In db.Staffs Where t.ClassID.equals(mclassID)  Select t