2011-11-08 41 views
14

Trong truy vấn này tôi có 3 bản ghi (int- (telefon = d.telefon), thập phân- (pesel = d.pesel), thập phân- (nip = d.nip)) một bản ghi khác là chuỗi .Không thể chuyển đổi hoàn toàn loại 'int?' đến '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(); 
} 

Và tôi có lỗi:

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

và hai khác lỗi với 'thập phân?' thay vào đó 'int?'.

mẫu:

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

} 

Chỉ imie và nazwisko được nonnullable, phần còn lại đã cho phép null

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

Hiện đang hoạt động. Tôi thay đổi trong mô hình:

decimal to decimal? 

int to int? 

Cảm ơn mọi người giúp đỡ

+0

lý do bạn không hiển thị lớp uzytkownikModel? có thể bạn nhận được lỗi đó bởi các trường hoặc thuộc tính không khớp với cùng loại với các giá trị của bạn. –

+0

bạn có thể đăng định nghĩa kiểu 'd' không? – JohnD

+0

Tôi đã thêm mã khác – user1031034

Trả lời

15

Trong lớp uzytkownikModel của bạn, các thuộc tính không có giá trị phải được khai báo là "int?" hoặc "thập phân?" thay vì "int" và "decimal".

26

Bạn sẽ cần phải đăng nhiều mã để có được một câu trả lời dứt khoát, nhưng ở đâu đó một trong các biến của bạn là nullable, và gán nó cho một kiểu không nullable bạn cần làm .Value.

Ví dụ, nếu đối tượng d's của bạn sở hữu imieNullable<int>, và đó là những gì đang gây ra vấn đề của bạn, bạn có thể làm điều này:

imie = d.imie.Value 

Bạn cũng sẽ cần phải xem đối với trường hợp d.imie là vô giá trị. Ví dụ:

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

Hoặc, nếu bạn thích ?? điều hành (mà đánh giá với giá trị không null đầu tiên):

imie = d.imie ?? 0 

(tôi chỉ sử dụng d.imie làm ví dụ - không có đủ đang được đưa lên pintpoint vấn đề chính xác.)

+0

Không hoạt động với .Value ... Tôi đã thêm mã khác. – user1031034

+0

D.imie.Value làm việc cho tôi giống như d.imie ?? 0; // Cảm ơn rất nhiều – Catto

3

int? là số Nullable<int>. Vì các cột cơ sở dữ liệu có thể là null, các thuộc tính được ánh xạ là Nullable.

Hãy xem xét mã này chỉ định int? giá trị cho các biến số int.

int? w = 2; 
int? x = null; 
int y = w ?? 3; 
int z = x ?? 4; 
Các vấn đề liên quan