Оператор '=' не определен для типов 'Integer' и 'IQueryable (Of Integer)' - PullRequest
3 голосов
/ 03 августа 2010

Это вызывает у меня головную боль.У меня есть этот запрос ссылки, который захватывает идентификатор

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 ]

1 голос
/ 03 августа 2010

Проблема в том, что 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 голосов
/ 11 мая 2015

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

Перейдите в меню VS2010 в Инструменты / Параметры / Проекты и решения / Построить и запустить /
Установите для MSBuild Project buildburbness "Подробно "

У меня была похожая ошибка, которая не отображалась в списке ошибок, но с этой настройкой параметров я увидел: - ошибка BC30452: Оператор '=' не определен для типов 'System.Nullable (OfЦелое число) »и« Целое число ».из этого утверждения: - Если 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
0 голосов
/ 03 августа 2010

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

Dim mclassID = (From x In db.SchoolClasses _
               Where x.VisitDateID = _visitdateID _
               Select x.ClassID).SingleOrDefault()
0 голосов
/ 03 августа 2010

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

ViewData("Staff") = From t In db.Staffs Where t.ClassID.equals(mclassID)  Select t
0 голосов
/ 03 августа 2010

Вы должны изменить это

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.

0 голосов
/ 03 августа 2010

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

ViewData("Staff") = (From t In db.Staffs Where t.ClassID = mclassID Select t)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...