2016-02-17 2 views
1

Я пытаюсь извлечь информацию из базы данных, а затем добавить значения вместе. У меня нет проблем при извлечении информации из базы данных, однако, кажется, что ошибка конверсии, когда я добавляю значения.ASP.NET: EF 5.X - Ошибка преобразования

Невозможно неявно преобразовать тип 'double?' удвоить'. Явное преобразование существует (вы пропали без вести броска?)

снаружи, где я-опроса у меня есть это:

var addition = 0.0; 

Когда я вытащить данные из базы данных, я пытаюсь добавить значение это:

addition = addition + clear; 

Оба addition и clear такие же тип данных, поэтому я путаюсь, почему это нужно будет делать какие-либо преобразования? (оба двойных).

Дополнительная информация: clear приходит от:

var clear = tbl_detail[a].AmountCleared; 

и tbl_detail массив из запрашиваемых данных.

Может ли кто-нибудь указать, почему я получаю эту ошибку? Или, возможно, мне точку в правильном направлении, потому что я не понимаю, почему:

  1. Он должен преобразовать что-нибудь, так как они того же типа данных и

  2. Что отливка на самом деле, потому что Google не действительно помогая мне, когда я ищу все это.

+1

Попробуйте добавить = additi on + clear.Value –

+1

'Double?' и 'double' - это не тот же тип данных. 'Double?' На самом деле 'Nullable . –

+0

ничего себе, так что все, что я отсутствовал, все это время было «.Value» в конце ... если вы положите это в ответ @ pλul, я помету его. Спасибо! – KDOT

ответ

1

Похоже, что AmountCleared является двойным с удлинением (double?). Вы можете сделать это:

addition += clear.Value 

Это вызовет исключение InvalidOperationException, если Clear равно null.

[Изменить] Вы также можете использовать addition += clear ?? 0.0, если вы хотите использовать значение по умолчанию для значений NULL.

Вы можете изменить AmoutCleared в двойное. Я подозреваю, что вы создали это с помощью конструктора или базы данных и использовали «allow nulls» в столбце базы данных, поэтому вы получаете тип с нулевым значением. Таким образом, вам придется изменить тип базы данных, чтобы не разрешать nulls. Но, не видя определения типа данных tbl_detail [a] или зная, как вы его создали, я не могу больше помочь вам.

1

AmountCleared фактически Nullable типа (Nullable), который позволяет типы C# значение для представления SQL сервера NULLS (типы значений не может быть присвоено значение NULL)

Вы можете получить основную ценность обнуляемого типа по просто вызывая свойство .Value, однако это вызовет исключение InvalidOperationException, если значение равно null, вы можете проверить, имеет ли оно значение, вызывая.HasValue

Попробуйте это:

addition += clear.HasValue ? clear.Value : 0; 
0

ясно обнуляемого значение безопасно манипулировать nullables использовать:

if(clear.hasValue) 
{ 
    addition += clear.Value; 
} 

Вы также можете использовать нулевой оператор коалесцирующий ?? к Откат к значению по умолчанию, если предоставленное значение равно нулю

addition += clear ?? 0.0; 
+1

Я думаю, вы хотели написать 'дополнение + = ясно ?? 0.0'. –

+0

действительно зависит от того, какая переменная является нулевой, но видя, что редактирование говорит, что ядро ​​происходит из базы данных, теперь я склонен согласиться с вами. Кстати, это причина, по которой я против использования var, поскольку его легко печатать, но делает код более трудным для чтения позже. –

+0

'var addition = 0.0;' такое же, как 'double add = 0.0', поэтому вы знаете, что он не является нулевым (тип значения). Вы не можете использовать нулевой оператор коалесценции для типа значения. «не компилируем. –

Смежные вопросы