Оператор == не может быть применен к Guid или int в Linq (пример книги MVC) - PullRequest
1 голос
/ 17 февраля 2010

Работая с книгой WROX «Beginning ASP.NET MVC 1.0», я обнаружил странную «ошибку».

«Оператор '==' не может быть применен к операндам типа« System.Guid »или« int »». Строка в вопросах:

(p => p.ID_Officers == id).Single();

Полный код приведен ниже, а сотрудники - моя таблица, ID_Officers - мое поле идентификатора. (Я полагаю, что я мог бы использовать «о» вместо «р»)

public ActionResult IndividualOfficer(int id)
    {
        OfficersDataContext dataContext = new OfficersDataContext();
        Officer officer = dataContext.Officers.Where
            (p => p.ID_Officers == id).Single();
        ViewData["OfficerName"] = officer.OfficerName;
        ViewData["Officer"] = officer;

        return View();
    }

Любые слова мудрости для этого новичка будут оценены.

Могу добавить, что хотя эта книга была рекомендована для начинающих - мальчик сухой. Это ясно изложено, очевидно видеть, что нужно добавить / набрать во время упражнений, но я чувствую, что это написано для опытного программиста, приходящего в MVC. Вместо начинающего программиста.

Итак, кто-нибудь знает о более дружественной для начинающих книге (я люблю книги и чтение), в которую я мог бы легче потратить время и зубы?

Спасибо за вашу помощь и руководство.

Mike

Ответы [ 2 ]

3 голосов
/ 17 февраля 2010

Это очень просто.

id является int. p.ID_Officers, как говорится в сообщении об ошибке, Guid, который не является int и не может быть проверен на int на равенство. Вы знаете, два разных типа.

Я не уверен, откуда взялся id метода контроллера. В какой-то момент вы должны предоставить пользователю список офицеров и создать ссылки, которые указывают на каждого отдельного офицера, который включает в себя p.ID_Officers в определении ссылки, но ваш маршрут ожидает int. Не видя, как настроены ваши маршруты или построены ваши офицерские ссылки, я не могу дать вам гораздо больше подсказок, чем это.

0 голосов
/ 17 февраля 2010

Ну, проблема в том, что p.ID_Officers - это System.Guid, в то время как id, с которым вы сравниваете его, имеет тип int. Таким образом, вы можете изменить подпись вашего метода на

public ActionResult IndividualOfficer(Guid id) 

И теперь он должен быть в состоянии скомпилировать.

Другой вариант - изменить столбец идентификатора в схеме базы данных на int вместо uniqueidentifier (который становится System.Guid в .net).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...