Получение ошибки при приведении логических типов при использовании LINQ to DataSets - PullRequest
0 голосов
/ 18 октября 2011

Хорошо. Кажется, я всегда решаю проблему приведения булевых типов при использовании LINQ в DataSets, но, похоже, каждый новый набор результатов приносит новую проблему.Итак, взгляните на следующую строку, которая заполняет логическое свойство объекта с помощью LINQ:

.IsActive = If(fd.IsNull("IsActive"), False, fd.Field(Of Boolean)("IsActive"))

У меня также был некоторый успех со следующим:

.IsActive = If((fd.Field(Of Integer?)("IsActive").HasValue), fd.Field(Of Integer)("IsActive"), False)

На этот раз ни один подход не сработал.Тип «IsActive» в базе данных имеет тип « bit », а в DataSet все возвращаемые записи имеют значение «0» или «1» в качестве значения.Несмотря на это, я получаю следующую ошибку:

"Указанное приведение недействительно. При приведении числа число должно быть числом меньше бесконечности."

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

1 Ответ

0 голосов
/ 19 октября 2011

Что ж, я нашел решение (больше похожее на обходной путь) исходной проблемы, а затем обнаружил источник проблемы при просмотре базы данных.Обходным решением было преобразовать значение в строку, а затем преобразовать в логическое значение.Действительно странно, почему я должен был сделать это для «битового» поля, но это сработало:

.IsActive = If(fd.IsNull("IsActive"), False, CBool(fd.Field(Of String)("IsActive").ToString()))

Хорошо, что все еще не выглядело правильно, мой оригинальный код в оригинальном посте должен и делает работает для битовых / логических типов.Ну а после 2-го возвращения в базу данных я нашел свой упс.По какой-то причине я случайно сделал этот столбец полем 'char (1)'.Неудивительно, что мне пришлось бросить на веревочку.После того, как колонка стала «битной», оригинальный код сработал.

...