我知道为什么会这样,但有人可以帮助我正确的语法方向吗? 目前我有三个表由一对一的可选关系连接。我加入了他们作为左外连接。我的询问是......
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:转换为值类型“Double”失败,因为实现值为null。结果类型的泛型参数或查询必须使用可空类型。
正确的语法是什么?
答案 0 :(得分:1)
我认为对可空的明确转换应该这样做:
IPDCharge = (decimal?)dc.OPDCharge
但错误消息表明OPDCharge
的类型实际上是double
,因此可能会转换为double?
?
答案 1 :(得分:1)
如果你想接受null作为0,那么试试:
IPDCharge = dc.OPDCharge ?? 0;
答案 2 :(得分:0)
尝试
IPDCharge = dc.OPDCharge.GetValueOrDefault(0)