1

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

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

什么是正确的语法?

4

3 回答 3

1

我认为显式强制转换为可为空的应该这样做:

IPDCharge = (decimal?)dc.OPDCharge

但是错误消息表明类型OPDCharge实际上是double,所以可能改为double?改为?

于 2013-08-14T15:50:30.400 回答
1

如果您想接受 null 为 0,请尝试:

IPDCharge = dc.OPDCharge ?? 0;

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

于 2013-08-14T15:51:44.013 回答
0

尝试

IPDCharge = dc.OPDCharge.GetValueOrDefault(0)
于 2013-08-14T15:50:33.553 回答