Невозможно неявно преобразовать тип 'int?' to 'int'

В этом запросе у меня есть 3 записи (int- (telefon = d.telefon), decimal- (pesel = d.pesel), decimal- (nip = d.nip)) другие записи являются строками.

public ActionResult detail(int LoginID)
{
    var user = (from d in baza.uzytkowniks
                where LoginID == d.LoginID
                select new uzytkownikModel {
                    imie = d.imie, 
                    nazwisko = d.nazwisko, 
                    telefon = d.telefon, 
                    pesel = d.pesel, 
                    nip = d.nip, 
                    email = d.email, 
                    adres_zamieszkania = d.adres_zamieszkania}).ToList();

    ViewBag.daneuser = user;
    return View();
}

И у меня есть ошибка:

Невозможно неявно преобразовать тип 'int?' to 'int'. Явное преобразование существует (вам не хватает роли?)

и еще две ошибки с "десятичным?" вместо этого 'int?'.

Модель:

 public class uzytkownikModel
    {
    [Required]
    public string imie { get; set; }

    [Required]
    public string nazwisko { get; set; }


    public decimal pesel { get; set; }
    public decimal nip { get; set; }

    public string adres_zamieszkania { get; set; }
    public int telefon { get; set; }
    public string email { get; set; }

}

Только imie и nazwisko являются неотъемлемыми, остальные имеют значение null

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Теперь работаем. Я меняю модель:

   decimal to decimal?

и

int to int?

Спасибо всем за помощь

Ответы

Ответ 1

В вашем классе uzytkownikModel свойства, которые могут быть nullable, должны быть объявлены как "int?" или "десятичной?" вместо "int" и "decimal".

Ответ 2

Вам нужно будет опубликовать больше кода, чтобы получить окончательный ответ, но где-то одна из ваших переменных имеет значение NULL, и для присвоения ему типа с нулевым значением вам нужно сделать .Value.

Например, если ваш объект d property imie равен Nullable<int>, и именно это вызывает вашу проблему, вы можете сделать это:

imie = d.imie.Value

Вам также понадобятся случаи, когда d.imie имеет значение NULL. Например:

imie = d.imie.HasValue ? d.imie.Value : 0

Или, если вам нравится??? оператор (который вычисляет первое ненулевое значение):

imie = d.imie ?? 0

(Я просто использую d.imie в качестве примера - недостаточно кода, посланного для pintpoint, точная проблема.)

Ответ 3

int? - это Nullable<int>. Поскольку столбцы базы данных могут быть пустыми, отображаемые свойства являются Nullable.

Рассмотрим этот код, который присваивает значения int? переменным int.

int? w = 2;
int? x = null;
int y = w ?? 3;
int z = x ?? 4;