2011-11-08 24 views
14

In questa query ho 3 record (int- (telefon = d.telefon), decimal- (pesel = d.pesel), decimal- (nip = d.nip)) un altro record sono stringhe .Impossibile convertire implicitamente il 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(); 
} 

E ho errore:

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

e due altri errori con 'decimali?' invece 'int?'.

Modello:

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 e nazwisko sono nonnullable, resto hanno permettere nulla

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

Ora lavoro. Ho cambiamento del modello:

decimal to decimal? 

e

int to int? 

Grazie a tutti per l'aiuto

+0

perché non mostri la classe uzytkownikModel? probabilmente stai ricevendo quell'errore perché i campi o le proprietà non corrispondono allo stesso tipo con i tuoi valori. –

+0

puoi pubblicare la definizione del tipo di "d"? – JohnD

+0

Ho aggiunto altro codice – user1031034

risposta

15

Nella classe uzytkownikModel, le proprietà con valori nulla devono essere dichiarate come "int?" o "decimale?" invece di "int" e "decimal".

26

Avrai bisogno di inviare più codice per ottenere una risposta definitiva, ma da qualche parte una delle vostre variabili è annullabile e per assegnarlo a un tipo non annullabile è necessario eseguire .Value.

Per esempio, se l'oggetto d's proprietà imie è Nullable<int>, e questo è ciò che sta causando il problema, si potrebbe fare questo:

imie = d.imie.Value 

Sarà inoltre necessario guardare per i casi in cui d.imie è nullo. Ad esempio:

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

Oppure, se ti piace il ?? operatore (che restituisce il primo valore non nullo):

imie = d.imie ?? 0 

(sto solo usando d.imie come un esempio - non c'è abbastanza il codice inviato al pintpoint il problema esatto.)

+0

Non ho lavorato con .Value ... Ho aggiunto altro codice. – user1031034

+0

Il valore di d.imie.Value ha funzionato per me proprio come d.imie ?? 0; // Molte grazie – Catto

3

int? è il Nullable<int>. Poiché le colonne del database possono essere nulle, le proprietà mappate sono Nullable.

Considerare questo codice che assegna i valori int? alle variabili int.

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