2010-08-03 2 views
3

Это дает мне головную боль. У меня есть эта ссылка запрос здесь, что захватывает IDОператор '=' не определен для типов Integer и IQueryable (Of Integer) '

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

Любая помощь будет высоко ценится. Я пробовал немало вещей, но безрезультатно. Я попытался выполнить кастинг, преобразование, «Операнд» и т. Д.

+2

Является ли оператором равенства VB.NET ==? –

+2

@NickLarsen no its just = – JonH

+0

Извините, не могу отменить комментарий вверх. Действительно, это '='. – MvanGeest

ответ

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() 
+0

Lol, kinda goofy, но это сработало! Спасибо bro – keynone

+0

@ Kehnon Israel: Если это сработало, отметьте его как ответ ... –

+0

На это ответили так быстро, что мне пришлось подождать несколько минут – keynone

0

Просто догадаться, но поможет ли это обернуть правую часть уравнения в скобках? Т.е .:

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

Нет, попробовал тоже. – keynone

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 ИНТ.

-1

вы пробовали:

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

yep, не совсем сработал:/ – keynone

+0

что касается .поддерживает вместо .equals? – Patricia

0

Использование оператора Select, вы можете иметь несколько возвращаемых результатов. Если вы ожидаете только одного результата (т. Е. Вы выбираете первичным ключом), вы можете использовать Single или SingleOrDefault (в зависимости от того, есть ли гарантированный результат), чтобы получить именно тот.

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

Вы можете увидеть ошибки в Output, если установить соответствующие параметры: -

Navigate VS2010 меню в меню Сервис/Параметры/Проекты и решения/Построение и запуск/
Установить MSBuild проекта построить выходной многословие для «Подробно»

У меня была аналогичная ошибка, которая не отображалась в списке ошибок, но с этой настройкой параметров я увидел: - ошибка BC30452: Operator '=' для типов не определен. System.Nullable (Of Integer) и Integer. из этого заявления: - Если tqGDBChart.UserIsGroupAdmin (Userid, GroupID) = 0 Then «Пользователь не группа администратора для этой группы

Легко фиксируется его с промежуточной переменной.

Dim GroupAdminCount As Integer = tqGDBChart.UserIsGroupAdmin(Userid, Groupid) 
If GroupAdminCount = 0 Then 'User is not a group admin for this group 
Смежные вопросы