2011-11-08 49 views
14

En esta consulta tengo 3 registros (int- (telefon = d.telefon), decimal- (pesel = d.pesel), decimal- (nip = d.nip)) otros registros son cadenas .¿No se puede convertir implícitamente el tipo 'int?' a 'int'

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:

Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)

y dos otros errores con 'decimal?' en su lugar '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; } 

} 

Sólo imie y Apellido de nonnullable están, resto han permita nula

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

Ahora funciona. Cambio en el modelo:

decimal to decimal? 

y

int to int? 

Gracias a todos por la ayuda

+0

¿por qué no muestra la clase uzytkownikModel? probablemente consigas ese error debido a que los campos o las propiedades no coinciden con el mismo tipo con tus valores. –

+0

puede publicar la definición del tipo de 'd'? – JohnD

+0

He añadido más código – user1031034

Respuesta

15

En la clase uzytkownikModel, las propiedades que son anulables deben declararse como "int?" o "decimal"? en lugar de "int" y "decimal".

26

Tendrá que publicará más código para obtener una respuesta definitiva, pero en alguna parte una de sus variables es nulo, y para asignarlo a un tipo que no admite nulo, debe hacer .Value.

Por ejemplo, si su objeto d's propiedad imie es Nullable<int>, y eso es lo que está causando el problema, usted puede hacer esto:

imie = d.imie.Value 

También tendrá que estar atento para los casos en 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 

(sólo estoy usando d.imie como un ejemplo - no hay suficiente código publicado a pintpoint el problema exacto.)

+0

No funciona con .Value ... Agregué más código. – user1031034

+0

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

3

int? es el Nullable<int>. Como las columnas de la base de datos pueden ser nulas, las propiedades mapeadas son Nullable.

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; 
Cuestiones relacionadas