2016-05-05 3 views
1

テーブルからデータを取得しますが、「DateOfBirth」フィールドはnullと表示されます。 「DateOfBirth」がnullの場合、どうすればそれをスキップできますか?テーブル内のDBヌルを確認する

EXCEPTION:DBNull.Valueをタイプして 'System.DateTime'にキャストできません。 NULL可能タイプ

var dd = dx.Tables[0].AsEnumerable().Select(x => new StaffModel 
{ 
    userno = x.Field<string>("USERNO"), 
    dateofbirth = x.Field<DateTime>("DATEOFBIRTH"), // This comes as a DB NULL. 
    passportno = x.Field<String>("PASSPORTNO"), 
    passportexp = x.Field<DateTime>("EXPDATE") 
}); 

答えて

1

は、この方法ではDBNull値をチェックしてください:

var dd = dx.Tables[0].AsEnumerable().Select(x => new StaffModel 
{ 
    userno = x.Field<string>("USERNO"), 
    dateofbirth = x["DATEOFBIRTH"] != DBNull.Value ? x.Field<DateTime>("DATEOFBIRTH") : DateTime.MinValue, 
    passportno = x.Field<String>("PASSPORTNO"), 
    passportexp = x.Field<DateTime>("EXPDATE") 
}); 

値がDBNull.Valueに等しい場合は、MinValueを設定したり、何でもしたいです。出産の

+0

DateTime.MinValueを処理するコードにロジックを追加する必要があります。 – TechGuy

+0

私の不具合を修正しました。ありがとう:-) – erikscandola

0

使用NULL可能DateTimeを使用してください。 DateTime?。そのモデル充填時

public class StaffModel 
{ 
    public string userno { get; set; } 
    public DateTime? dateofbirth { get; set; } 
    public string passportno { get; set; } 
    public DateTime passportexp { get; set; } 
} 

その後:あなたのStaffModel

var dd = dx.Tables[0].AsEnumerable().Select(x => new StaffModel 
{ 
    userno = x.Field<string>("USERNO"), 
    dateofbirth = x.Field<DateTime?>("DATEOFBIRTH"), // note the ?   
    passportno = x.Field<String>("PASSPORTNO"), 
    passportexp = x.Field<DateTime>("EXPDATE") 
}); 
+0

を確認することができます日付は私のデータベースtype.in NULL可能でない問題があります、時間のために私は出産の – TechGuy

+0

'日ではありませんそれをスキップする必要がありますされていますnullable type'あなたの例外はそうでないと言います。 –

+0

実際にDBが外部から来ている、それはDBの問題です...私はそれをスキップする必要がある時間です... – TechGuy

0

をあなたの変数がnullタイプでない場合DateTime.MinDateを割り当てる必要があります。

var dd = dx.Tables[0].AsEnumerable().Select(x => new StaffModel 
{ 
    userno = x.Field<string>("USERNO"), 
    dateofbirth = x.Field<DateTime>("DATEOFBIRTH") ?? DateTime.MinDate, 
    passportno = x.Field<String>("PASSPORTNO"), 
    passportexp = x.Field<DateTime>("EXPDATE") 
}); 
0

あなたがDBNull.Valueの

ため
object value = x.Field("DATEOFBIRTH"); 
if (value == DBNull.Value) 
{ 
    // do something 
} 
else 
{ 
    // do something else 
} 
関連する問題