2011-11-08 30 views
14

W tym zapytaniu mam 3 zapisy (int- (telefon = d.telefon), dziesiętny- (pesel = d.pesel), dziesiętny- (nip = d.nip)) Kolejne zapisy to ciągi .Nie można niejawnie przekonwertować typu "int?" do '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(); 
} 

I mam błąd:

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

i dwa kolejne błędy z "przecinku? zamiast "int?".

Model:

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

} 

Tylko imie i Nazwisko są nonnullable, reszta nie pozwalają zerowy

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

Teraz pracuj. Zmienić w modelu:

decimal to decimal? 

i

int to int? 

Dziękuję wszystkim za pomoc

+0

dlaczego nie wyświetlasz klasy uzytkownikModel? prawdopodobnie otrzymujesz ten błąd, ponieważ pola lub właściwości nie pasują do tego samego typu z twoimi wartościami. –

+0

Czy możesz umieścić definicję typu "d"? – JohnD

+0

Dodałem więcej kodu – user1031034

Odpowiedz

15

W swojej klasie uzytkownikModel właściwości o wartości zerowej powinny być zadeklarowane jako "int?" lub "dziesiętny?" zamiast "int" i "decimal".

26

Musisz pisać więcej kodu, aby uzyskać ostateczną odpowiedź, ale gdzieś jednego ze swoich zmiennych jest null, a aby przypisać go do typu nie podlegającego zerowaniu, musisz wykonać .Value.

Na przykład jeśli Państwa obiekt D's nieruchomość imie jest Nullable<int>, a to, co jest przyczyną problemu, można to zrobić:

imie = d.imie.Value 

Potrzebny będzie również oglądać w przypadkach, gdy d.imie jest zero. Na przykład:

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

Lub, jeśli chcesz? operator (co ocenia się na pierwszej wartości non-null):

imie = d.imie ?? 0 

(jestem po prostu za pomocą d.imie jako przykład - nie ma wystarczająco dużo kod wysłana do pintpoint dokładnie problem.)

+0

Nie pracuję z .Value ... Dodałem więcej kodu. – user1031034

+0

The d.imie.Value pracował dla mnie tak jak d.imie ?? 0; // Wielkie dzięki – Catto

3

int? jest Nullable<int>. Ponieważ kolumny bazy danych mogą mieć wartość NULL, odwzorowane właściwości mają wartość Nullable.

Rozważ ten kod, który przypisuje wartości int? do zmiennych int.

int? w = 2; 
int? x = null; 
int y = w ?? 3; 
int z = x ?? 4; 
Powiązane problemy