2015-07-03 1 views
0

Я постоянно получаю сообщение об ошибке ниже при попытке восстановить данные, используя структуру сущностей и присвоения моего пользовательского класса КлиентНевозможно преобразовать исходный тип System.Nullable для целевого типа Int

не может преобразовать тип источника «System.Nullable» целевого типа ВНУТР

CustomerNumber и маршрут имеют тип данные Int32 и полей в базе данных позволяют аннулирует

 select new Customer() 
      { 
       AccountListId = j.cost1, 
       Csr = j.cost2, 
       CustomerName = j.cost3, 
       Address = j.cost4, 
       Telephone = j.cost5, 
       Contact = j.cost6, 
       CustomerNumber = j.cost7, 
       Branch = j.cost8, 
       Route = j.cost9, 
      }).ToList<Customer>(); 

Как я могу справиться с этим?

+0

А что вы хотели бы назначить на 'полях Int32', если значение из базы данных' null'. Очевидно, что «null» недопустим. Вы хотите установить '0' или' -1', или что? – sstan

+0

Возможный дубликат [Как преобразовать nullable int в int] (http://stackoverflow.com/questions/5995317/how-to-convert-nullable-int-to-int) –

ответ

2

По-видимому, j.cost7 и j.cost9 имеют тип Nullable<Int32>. Я предполагаю, потому что вы не показали нам.

Очевидно, что вы не можете назначить Nullable<Int32> на номер Int32, потому что, что вы будете делать, если значение null? Компилятор не знает. Вы должны решить, что делать в этом случае, и код соответственно.

Допустим, вы решили назначить -1 в качестве значения по умолчанию в случае значения null в базе данных, то вы можете использовать null-coalescing operator и сделать что-то вроде этого:

select new Customer() 
     { 
      AccountListId = j.cost1, 
      Csr = j.cost2, 
      CustomerName = j.cost3, 
      Address = j.cost4, 
      Telephone = j.cost5, 
      Contact = j.cost6, 
      CustomerNumber = j.cost7 ?? -1, 
      Branch = j.cost8, 
      Route = j.cost9 ?? -1, 
     }).ToList<Customer>(); 

И.Ф., что вы действительно хотите , должен сохранять значение null, если он есть, а затем изменить тип CustomerNumber и Route от Int32 до Nullable<Int32> или используя альтернативный синтаксис: int?.

0

Попробуйте

if (j.cost7 == null) 
{ 
    CustomerNumber = 0; 
} 
else 
{ 
    CustomerNumber = j.cost7 
} 
+0

Это не будет работать, синтаксически, в с конструктором. –

0

Вы можете использовать значение по умолчанию для int.

Например:

CustomerNumber = j.cost7 ?? default(int), 
     Branch = j.cost8, 
     Route = j.cost9 ?? default(int),