2012-12-03 7 views
1

사람은 아이디어가 있습니까 :날짜 시간 및 DbNull.Value

if (_item.Created == DateTime.MinValue) 
{ 
    ListSqlParam.Add(new SqlParameter("@TransactionCreated", DBNull.Value)); 
} 
else 
{ 
    ListSqlParam.Add(new SqlParameter("@TransactionCreated", _item.Created)); 
} 

을하지만이 :

ListSqlParam.Add(new SqlParameter("@TransactionCreated",((_item.Created == DateTime.MinValue) ? DBNull.Value : _item.Created))); 
+0

두 번째 경우에 어떤 나던 사용할 수 있습니까? – ryadavilli

+1

@ryadavilli - 컴파일되지 않습니다. – Oded

+0

'DBNull.Value'는'_item.Created'와 같은 타입이 아닙니다. – Bridge

답변

0

conditional operator를 사용하여 조건의 다른 측면에 의해 반환 된 두 가지 유형 (참 및 거짓 가지)은 서로 같아야하거나 암묵적으로 서로 바뀔 수 있어야합니다.

DBNull.ValueDateTime은 그러한 값이 아닙니다.

3

이유는 조건부 연산자가 특정 형식의 식이기 때문입니다. 이 특정 유형은 연산자의 두 가지 분기에있는 표현식의 유형에 따라 컴파일러에서 유추됩니다.
코드에서 DBNull.Value_item.Created이 서로 관련이없는 유형이므로이 특정 유형을 컴파일러에서 유추 할 수 없습니다. 둘 중 하나를 다른 유형으로 캐스팅 할 수 없습니다. 그것이 작동되도록하려면

object에 적어도 하나 개의 지점을 던져 : 대신

(_item.Created == DateTime.MinValue) ? (object)DBNull.Value : _item.Created 
0

사용 SqlDateTime을 :

_item.Created == DateTime.MinValue ? SqlDateTime.Null : new SqlDateTime(_item.Created)