2017-05-30 79 views
4

我試圖從數據集中到這裏保存列表值是我的代碼條件表達式類型

GetPostWRTPager_Class = ds.Tables[0] 
    .AsEnumerable() 
    .Select(r => new GetPostWRTPager() { 
    IsApproved = r["IsApproved"] == DBNull.Value 
     ? DBNull.Value 
     : Convert.ToInt32(r["IsApproved"]), 
    ApprovedBy = r["ApprovedBy"], 
    ApprovedOn = Convert.ToDateTime(r["ApprovedOn"]), }) 
    .ToList(); 

它總是給下面

類型條件表達式我錯誤定義不能被確定,因爲有 'System.DBNull'和'int'之間沒有隱式轉換

我的c有什麼問題ode

+0

是批准的int值?或位值? –

+0

IsApprove是int值 1)批准 2)拒絕 3)待定 –

+0

是您的'GetPostWRTPager.IsApproved'可爲空嗎? –

回答

2

是的,在DBNullint之間沒有隱式轉換。但是你可以使用支持可空類型的Field擴展方法(不是使用System.Object越好):

IsApproved = r.Field<int?>("IsApproved"), 

如果你不能改變的屬性,使其成爲一個int?你要投的intobject

IsApproved = r.IsNull("IsApproved") ? DBNull.Value : (object)r.Field<int>("IsApproved"), 

如果你萬一要的int,爲0是NULL

IsApproved = r.Field<int?>("IsApproved").GetValueOrDefault(), 

如果IsApproved實際上是一個bool屬性(其名稱所暗示),只有1意味着true

IsApproved = r.Field<int?>("IsApproved") == 1, 
+0

謝謝你解決了我的問題 非常感謝 –