¿No se puede convertir implícitamente el tipo 'int?' a 'int'

En esta consulta tengo 3 registros (int- (telefon = d.telefon), decimal- (pesel = d.pesel), decimal- (nip = d.nip)) otros registros son cadenas.

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();
}

Y tengo error:

¿No se puede convertir implícitamente el tipo 'int?' a 'int'. Existe una conversión explícita (¿le falta un elenco?)

y otros dos errores con 'decimal?' en lugar de 'int?'.

Modelo:

 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; }

}

Solo imie y nazwisko no son anulables, el resto tiene permitir null

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

Ahora trabaja. Cambio de modelo:

   decimal to decimal?

y

int to int?

Gracias a todos por la ayuda

preguntado el 08 de noviembre de 11 a las 16:11

¿Por qué no muestra la clase uzytkownikModel? probablemente obtenga ese error porque los campos o propiedades no coinciden con el mismo tipo con sus valores. -

¿Puedes publicar la definición del tipo de 'd'? -

3 Respuestas

Deberá publicar más código para obtener una respuesta definitiva, pero en algún lugar una de sus variables es anulable, y para asignarla a un tipo no anulable que necesita hacer .Value.

Por ejemplo, if la propiedad de su objeto d imie is Nullable<int>, y eso es lo que está causando su problema, puede hacer esto:

imie = d.imie.Value

También deberá estar atento a los casos en los que d.imie es nulo. Por ejemplo:

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

O, si te gusta el ?? operador (que se evalúa como el primer valor no nulo):

imie = d.imie ?? 0

(Solo estoy usando d.imie como ejemplo: no hay suficiente código publicado para señalar el problema exacto).

respondido 08 nov., 11:20

El d.imie.Value funcionó para mí al igual que d.imie ?? 0; // Muchas gracias - Catto

En su clase uzytkownikModel, las propiedades que aceptan valores NULL deben declararse como "int?" o "decimal?" en lugar de "int" y "decimal".

respondido 08 nov., 11:20

int? es la Nullable<int>. Dado que las columnas de la base de datos pueden ser nulas, las propiedades asignadas son anulables.

Considere este código que asigna int? valores a int variables.

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

respondido 08 nov., 11:20

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.