1

LinqでNullをチェックするにはどうすればよいですか?

null 許容DataTableの列型を持つを返すサードパーティ コードがあります。DateTime

私のコード:

 var profile = (from d in ds.Tables[0].AsEnumerable()
               select new User
               {
                 FirstName = d["FirstName"].ToString(), 
                 Birthdate = Convert.ToDateTime(d["BirthDate"].ToString())
               }).FirstOrDefault();

ステートメントObject cannot be cast from DBNull to other typesのエラーを返します。Birthdate=

次のコードを使用してみましたが、キャスト例外が返されます (文字列から DateTime にキャストできませんか?)

Birthdate = (DateTime?)d["BirthDate"].ToString();

null 値を簡単にチェックする方法はありますか?

4

3 に答える 3

6

私はこれをテストしていませんが、次のことを試すことができます。

Birthdate = d.Field<DateTime?>("BirthDate")

MSDNから:

Field メソッドは、null 許容型として列にアクセスするためのサポートを提供します。DataSet の基になる値が [DBNull.]Value の場合、返される null 許容型の値は null になります。

于 2012-07-09T02:00:22.673 に答える
1

DBNull次のように、の値をチェックするヘルパー関数を作成できます。

private static DateTime? ConvertNullableToDateTime(object val) {
    return (val != null && val != DBNull.Value) ? Convert.ToDateTime(val.ToString()) : null;
}

これで、LINQ クエリでこのメソッドを使用できます。

var profile = (from d in ds.Tables[0].AsEnumerable()
           select new User
           {
             FirstName = d["FirstName"].ToString(), 
             Birthdate = ConvertNullableToDateTime(d["BirthDate"])
           }).FirstOrDefault();
于 2012-07-09T01:48:29.280 に答える
0

上記のコードを使用中にエラーが発生しました。以下のコードを使用できると思います。

Birthdate = dr["BirthDate"] == DBNull.Value ? (DateTime?)null : (DateTime)dr["BirthDate"];

を使用するConvert.ToString(dr["BirthDate"])と、DBNull がある場合は空の文字列に変換されます。

それも試してみてください。

于 2012-07-09T02:25:59.777 に答える