2013-08-14 2 views
1

Я знаю, почему это происходит, но может ли кто-нибудь помочь мне в правильном направлении синтаксиса? В настоящее время у меня есть три таблицы, соединенные одним-единственным необязательным отношением. И я присоединился к ним в качестве внешнего внешнего соединения. Мой запрос ....Ошибка параметра Generic Linq

var model = from t1 in db.Doctors 
      join d in db.DoctorAddress on t1.DoctorId equals d.DoctorId into listi 
      join dc in db.DoctorCharges on t1.DoctorId equals dc.DoctorId into listj 
      join da in db.DoctorAvailablities on t1.DoctorId equals da.DoctorId into listk 
      from d in listi.DefaultIfEmpty() 
      from dc in listj.DefaultIfEmpty() 
      from da in listk.DefaultIfEmpty() 
      select new 
      { 
       Name = t1.Name, 
       RoomNo = da.RoomNo, 
       IPDCharge = dc.OPDCharge, 
       Address = d.Address, 
      }; 

Моя проблема заключается в том, что OPDCharge имеет тип Decimal(not null)

Я получаю ошибку является:

Сведения об исключении: System.InvalidOperationException: Актерский к значению type 'Double' failed, потому что материализованное значение равно null. Либо общий параметр типа результата, либо запрос должны использовать тип с нулевым значением.

Какой будет правильный синтаксис?

+0

Что типы данных '' dc.OPDCharge' и IPDCharge '? Также каков тип данных столбца в базе данных? – gunr2171

+0

IPDCharge = dc.OPDCharge ?? 0; Возможно. – stevepkr84

+0

Столбец OPDCharge имеет десятичный тип. – Jaan

ответ

1

Я думаю, что явное приведение к обнуляемому должно это сделать:

IPDCharge = (decimal?)dc.OPDCharge 

Но сообщение об ошибке свидетельствует о том, что тип OPDCharge на самом деле double, поэтому, может быть приведен к double? вместо этого?

+0

@ gunr2171, но 'IPDCharge' находится в анонимном типе, имеет тот же тип, что и цель. – Magnus

0

Попробуйте с

IPDCharge = dc.OPDCharge.GetValueOrDefault(0) 
Смежные вопросы