2017-05-30 2 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の間の暗黙の変換はありません。あなたがそのプロパティを変更できない場合は、intobjectにキャストする必要があり、それをint?を作るために

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

をしかし、あなたは( System.Objectを使用してより良い)NULL可能タイプをサポートしてい Field拡張メソッドを使用することができます
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

ありがとう、これは私の問題を解決しました ありがとう –