Установка параметра в DBNull.Value с использованием троичного синтаксиса дает ошибку?

У меня есть следующий фрагмент кода для установки параметра, который будет использоваться в операторе INSERT для установки столбца VARCHAR в базе данных SQL Server. Мой объект-значение (с именем ilo) имеет свойство с именем Description, которое инициализируется значением String.Empty, а затем либо получает какое-либо значение, считываемое из XML, либо, если этот элемент XML пуст, он просто остается как String.Empty.

Поэтому при вставке в базу данных, если для свойства все еще задано значение String.Empty, я бы хотел, чтобы оно вставляло нулевое значение.

database.AddInParameter(cmd, "@description", DbType.String, 
                           (ilo.Description.Equals(string.Empty)) ?
                            DBNull.Value :
                            ilo.Description);

Таким образом, в основном я говорю, что если ilo.Description равен string.empty, установите для параметра значение DBNull.Value, в противном случае установите для него значение ilo.Description.

Это дает следующую ошибку в Visual Studio ...

Ошибка 141 Тип условного выражения не может быть определен, поскольку не существует неявного преобразования между «System.DBNull». и «строка»;

Зачем?

Любопытно, что я могу сделать следующее без ошибок, что должно быть точно так же, как и при использовании встроенного условного синтаксиса, как описано выше!?!

if(ilo.Description.Equals(string.Empty))
{
    database.AddInParameter(cmd, "@description", DbType.String, DBNull.Value);
}
else
{
    database.AddInParameter(cmd, "@description", DbType.String, ilo.Description);
}

Я искал другие посты и нашел следующий, но он не отвечает на мой вопрос.

EntLib Way to Bind "Null" Значение в параметр

Меня больше интересует ПОЧЕМУ, потому что очевидный обходной путь состоит в том, чтобы просто использовать оператор if / else вместо встроенного (троичного) синтаксиса?

По этой ссылке есть своего рода ответ, но мне бы хотелось получить лучшее объяснение, потому что мне кажется, что Б.С. это не работает; Я бы назвал это ошибкой!

http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

Ответы на вопрос(4)

Ваш ответ на вопрос