C # ADO.NET: nulos e DbNull - existe uma sintaxe mais eficiente?
eu tenho umaDateTime?
que estou tentando inserir em um campo usando umDbParameter
. Estou criando o parâmetro assim:
DbParameter datePrm = updateStmt.CreateParameter();
datePrm.ParameterName = "@change_date";
E então eu quero colocar o valor doDateTime?
nodataPrm.Value
enquanto responde pornull
s.
Eu pensei que inicialmente seria inteligente:
datePrm.Value = nullableDate ?? DBNull.Value;
mas isso falha com o erro
Operador '??' não pode ser aplicado a operandos do tipo 'System.DateTime?' e 'System.DBNull'
Então, acho que isso só funciona se o segundo argumento for uma versão não anulável do primeiro. Então eu fui para:
datePrm.Value = nullableDate.HasValue ? nullableDate.Value : DBNull.Value;
mas isso também não funciona:
O tipo de expressão condicional não pode ser determinado porque não há conversão implícita entre 'System.DateTime' e 'System.DBNull'
Mas não quero converter entre esses tipos!
Até agora, a única coisa que posso trabalhar é:
if (nullableDate.HasValue)
datePrm.Value = nullableDate.Value;
else
datePrm.Value = DBNull.Value;
Essa é realmente a única maneira de escrever isso? Existe uma maneira de obter uma linha usando o operador ternário para trabalhar?
Atualizar: Eu realmente não entendo porque o ?? versão não funciona. MSDN diz:
O ?? O operador retorna o operando do lado esquerdo, se não for nulo; caso contrário, ele retornará o operando do lado direito.
É exatamente o que eu quero!
Update2: Bem, era meio óbvio no final:
datePrm.Value = nullableDate ?? (object)DBNull.Value;