以下是我的linq代码
mTimeslot = (from users in mContext.MFUsers
join tblTime in mContext.tblTimeslots on users.UserID equals tblTime.varAdvisorId
join tblApp in mContext.tblAppointments on new { varAdvisorId=users.UserID,tblTime.varSlotId} equals new {tblApp.varAdvisorId, varSlotId = tblApp.varSlotId}
select new Timeslot
{
varAdvisorId = users.UserID,
varAdvisorName = users.varUserName
}).FirstOrDefault();
在第二个连接中,我收到一条错误,指出无法从查询中推断出类型参数。
tblTime.varSlotId
是整数,而tblApp.varSlotId
是可以为空的整数。我可以弄清楚错误是在上面提到的列中。但是我无法将整数值转换为可以为空的整数,因为这两列的名称都是varSlotId
。
答案 0 :(得分:7)
那么这就是问题所在。你的两个匿名类型是不一样的,他们需要。施展tblTime.varSlotId是一个整数,其中tblApp.varSlotId是一个可以为null的整数。
tblTime.varSlotId
:可能最简单
join tblApp in mContext.tblAppointments
on new { varAdvisorId = users.UserID, varSlotId = (int?) tblTime.varSlotId }
equals new { tblApp.varAdvisorId, tblApp.varSlotId }