Ошибка SQL LINQ 2: Нулевое значение не может быть назначено члену с типом System.Byte, который является необнуляемым значением - PullRequest
4 голосов
/ 29 июня 2010

Я пытаюсь написать SQL-запрос LINQ 2, оставив наши объединения. Но при выполнении я получаю следующее исключение

Нулевое значение не может быть присвоено элементу с типом System.Byte, который является типом значения, не допускающим обнуление

Мой запрос LINQ 2 SQL здесь

 Dim items = (From i In oRecelDB.IV00200s _
                Group Join c In oRecelDB.MDS_CONTAINERs _
                    On c.CONTAINERBIN Equals i.BIN Into ic = Group From x In ic.DefaultIfEmpty() _
                Group Join sop In oRecelDB.SOP10201s _
                     On i.SERLNMBR Equals sop.SERLTNUM And i.ITEMNMBR Equals sop.ITEMNMBR _
                     Into os = Group From y In os.DefaultIfEmpty() _
                Group Join iv1 In oRecelDB.IV10002s _
                     On iv1.SERLTNUM Equals i.SERLNMBR And iv1.ITEMNMBR Equals i.ITEMNMBR _
                     Into iv2s = Group From z In iv2s.DefaultIfEmpty() _
                 Where i.SERLNMBR = "2323"  _
                 Select Bin = i.BIN, i.ITEMNMBR, i.LOCNCODE, i.DATERECD, i.SERLNMBR, i.SERLNSLD _
                , YPosted = y.POSTED).ToList()

Я понимаю, что значение внутри y.POSTED приходит как ноль, может быть причиной. Как я могу справиться с этим? Какие-нибудь мысли ? Спасибо в Advace

Ответы [ 2 ]

5 голосов
/ 29 июня 2010

Проблема в том, что SQL, сгенерированный для этого запроса, возвращает нулевое значение для этого столбца, либо из-за левого соединения, либо из подзапроса, возвращающего ноль. C # выводит тип байта, потому что столбец таблицы не имеет значения NULL, но столбец результата имеет значение NULL.

Исправьте это, выполнив

   YPosted = (byte?)y.POSTED
1 голос
/ 29 июня 2010

Одна возможность, о которой я могу подумать, состоит в том, что когда вы генерировали свой контекстный класс LINQ и классы объектов, у вас было поле базы данных, для которого было установлено значение NOT NULL. Позднее вы изменили поле базы данных на Null, а некоторые записи содержат нулевые значения.Возможно, вам придется взглянуть на код, стоящий за файлом вашего dbml (LINQ) файла. Обнуляемые поля, такие как POSTED, должны быть объявлены как

private System.Nullable<Byte> Posted.

Если поле не определено как обнуляемое, вы можете изменить его на nullable иливосстановить ваши dbml файлы и ваша проблема будет исправлена.

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