Если вы используете условный (троичный) оператор, компилятору требуется неявное преобразование между обоими типами, в противном случае вы получите исключение.
Так что вы можете исправить это, приведя один из обоих к System.Object
:
planIndexParameter.Value = (AgeItem.AgeIndex== null) ? DBNull.Value : (object) AgeItem.AgeIndex;
Но так как результат не очень хорош, и вы всегда должны помнить этот кастинг, вы можете использоватьтакой метод расширения вместо:
public static object GetDBNullOrValue<T>(this T val)
{
bool isDbNull = true;
Type t = typeof(T);
if (Nullable.GetUnderlyingType(t) != null)
isDbNull = EqualityComparer<T>.Default.Equals(default(T), val);
else if (t.IsValueType)
isDbNull = false;
else
isDbNull = val == null;
return isDbNull ? DBNull.Value : (object) val;
}
Тогда вы можете использовать этот краткий код:
planIndexParameter.Value = AgeItem.AgeIndex.GetDBNullOrValue();