如何在对列值的条件赋值中使用 DbNull.Value?

ing*_*939 3 c# dbnull conditional-operator

我正在构造一个带有参数的 Command 对象来设置列值。我想使用一个简单的条件将某个nullable int列设置为整数值或DbNull.Value,具体取决于变量是否为空。

例子:

dbCmd.Parameters.Add("@MyIntColumn", SqlDbType.Int).Value =
    myColumnValue == null ? DBNull.Value : myColumnValue;
Run Code Online (Sandbox Code Playgroud)

当然,这会给编译器错误:“DbNull 和 int 之间没有隐式转换”。

那么在那里使用条件的正确方法是什么,其结果可以是 int 或 DbNull?

lc.*_*lc. 5

问题是编译器无法推断表达式的结果将是什么类型 - 无论是 aDBNull还是 an int,因为它们是不兼容的类型。

明确地将其至少一侧转换为object(最大公分母),它将理解:

dbCmd.Parameters.Add("@MyIntColumn", SqlDbType.Int).Value =
    myColumnValue == null ? (object)DBNull.Value : myColumnValue;
Run Code Online (Sandbox Code Playgroud)