Linq泛型参数错误

时间:2013-08-14 15:45:57

标签: c# linq entity-framework

我知道为什么会这样,但有人可以帮助我正确的语法方向吗? 目前我有三个表由一对一的可选关系连接。我加入了他们作为左外连接。我的询问是......

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。结果类型的泛型参数或查询必须使用可空类型。

正确的语法是什么?

3 个答案:

答案 0 :(得分:1)

我认为对可空的明确转换应该这样做:

IPDCharge = (decimal?)dc.OPDCharge

但错误消息表明OPDCharge的类型实际上是double,因此可能会转换为double?

答案 1 :(得分:1)

如果你想接受null作为0,那么试试:

IPDCharge = dc.OPDCharge ?? 0;

更多信息:http://msdn.microsoft.com/en-us/library/ms173224.aspx

答案 2 :(得分:0)

尝试

IPDCharge = dc.OPDCharge.GetValueOrDefault(0)