Форум программистов, компьютерный форум, киберфорум
LINQ
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
1 / 1 / 1
Регистрация: 28.09.2012
Сообщений: 54
1

Значение NULL не может быть присвоено члену, который является типом System.Int32

14.02.2013, 21:07. Показов 4291. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Пишу следующий код:
C#
1
int? emp = ctx.Employee.Max(em => em.EmployeeID);
Когда таблица Employee пустая, выскакивает exception:
Значение NULL не может быть присвоено члену, который является типом System.Int32, не допускающим значения NULL.

не могу понять почему.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2013, 21:07
Ответы с готовыми решениями:

Создать структуру значение которой может быть null
создал структуру вот так: private struct mystruct { значения.... }...

Name не может иметь значение NULL или быть пустым
Выводит такую ошибку, хотя удалил этот атрибут уже, но все равно выводит это сообщение, кто знает в...

Директива using namespace может применяться только к пространствам имен; "System.Object" является типом, а не пространством имен
Что с этим делать?

Тело метода не может быть блоком итератора, так как "void" не является типом интерфейса итератора
using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using...

7
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
15.02.2013, 16:42 2
Цитата Сообщение от Badfish Посмотреть сообщение
ctx.Employee.Max(em => em.EmployeeID);
Вот эта строчка возвращает не Nullable<int>, а просто int.
Попробуйте сделать приведение типов, а лучше просто поставьте в этой функции проверку на null

Вот так:


C#
1
int? emp = ctx.Employee.Max(em => em.EmployeeID) ?? null;
1
519 / 511 / 68
Регистрация: 19.09.2011
Сообщений: 826
15.02.2013, 21:27 3
Проблема не в том, для того, чтобы linq выбрал максимальное значение, нужно чтобы коллекция была не пустой:
C#
1
int? emp = cts.Any()? ctx.Employee.Max(em => em.EmployeeID) : null;
1
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
15.02.2013, 21:39 4
Все равно требует nullable. Без приведения типов не обойтись, наверное.


C#
1
int? emp = lst.Any()? (int?)lst.Max(): null;
1
1 / 1 / 1
Регистрация: 28.09.2012
Сообщений: 54
16.02.2013, 19:45  [ТС] 5
помогло, спасибо
0
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
17.02.2013, 01:08 6
Цитата Сообщение от Badfish Посмотреть сообщение
помогло, спасибо
Нет, это тупое решение.
С этими коллекциями совсем позабыл про стандартные операторы приведения типов.


Вот так будет гораздо правильнее.
Используйте этот способ, но не тот.
C#
1
2
3
4
5
6
int? emp = ctx.Employee.Max(em => em.EmployeeID) as int?;
 
Или вот так:
 
int? emp = (int?)ctx.Employee.Max(em => em.EmployeeID);
Скобочки, по моему и есть оператор as.
0
519 / 511 / 68
Регистрация: 19.09.2011
Сообщений: 826
17.02.2013, 12:20 7
n1l, смотри логику:
1. Нужно выбрать максимальное значение для employeeID
2. Если таблица пуста - получить null.
3. Max - всегда вернет exception если коллекция пуста, это не зависит от типа возвращаемого значения:

я забыл, что, у конструкции ?: оба значения должны быть одного типа, и авто-приведение типов не проканает.

Эта запись
C#
1
int? emp = lst.Any()? (int?)lst.Max(em => em.EmployeeID): null;
эквивалентна такой:
C#
1
2
3
int? emp = null;
if(lst.Any())
    emp = lst.Max(em => em.EmployeeID);// в этом случае int к int? приведется автоматически
0
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
17.02.2013, 14:51 8
А ну да. Тогда нужно просто условие переделать.
Не через вызов, а через проверку count.

C#
1
int? emp = (ctx.Employee.Count!=null)?(int?)ctx.Employee.Max(em => em.EmployeeID):null;
Добавлено через 5 минут
C#
1
int? emp = (ctx.Employee.Count!=0)?(int?)ctx.Employee.Max(em => em.EmployeeID):null;
0
17.02.2013, 14:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2013, 14:51
Помогаю со студенческими работами здесь

Migration в IdentityModel: "Email не может иметь значение NULL или быть пустым"
В общем создал Web Application ASP.NET, в встроеную IdentityModel с помощью Migration вставил два...

Почему System.Char не может быть неявно преобразован к System.Int16?
Почему System.Char не может быть неявно преобразован к System.Int16? Почему только в его...

Метод Graphics.DrawLine(Int32, Int32, Int32, Int32) Узнать координаты всех точек данной прямой
Как я могу получить координаты всех точек, создаваемых данных методом? Мне необходимо это в...

Ошибка: System.ArgumentNullException: "Значение не может быть неопределенным. Имя параметра: input"
Вот код: namespace WindowsFormsApp4 { public partial class Form1 : Form { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru