var recordhoursQuery = from w in crnnsupContext.WorkHoursHistories
join p in crnnsupContext.ProvStates on w.Province equals p.ProvinceStateID
join r in crnnsupContext.Renewals on new {w.WorkYear+1,w.RegNumber} equals new{r.RenewalYear, r.RegNumber}
where r.RegNumber == _username
select new CRecordHours
{
WorkHoursHistory = w,
Renewal = r
};
如何实现+ 1等于b?即使我删除+1
,仍会出现错误“连接子句中某个表达式的类型不正确......”
答案 0 :(得分:3)
您收到该错误是因为您的匿名类型不同。对于WorkHoursHistories
,您使用的是WorkYear
,但对于Renewals
,您使用的是RenewalYear
。对于两者,RegNumber
是相同的,因此不需要给它一个新名称。
要解决此问题,请将您的匿名类型更改为:
new { Year = w.WorkYear + 1, w.RegNumber } equals
new { Year = r.RenewalYear, r.RegNumber }
通常您可以更改其中一种类型以确保名称相同,但在您的情况下Year
更清晰。此外,如果省略为w.WorkYear + 1
指定名称,则会收到错误。
答案 1 :(得分:0)
这样的事情:
from w in crnnsupContext.WorkHoursHistories
join p in crnnsupContext.ProvStates on w.Province equals p.ProvinceStateID
from r in crnnsupContext.Renewals
.Where(a=>a.RegNumber==w.RegNumber && (w.WorkYear+1)==r.RenewalYear)
where r.RegNumber == _username
select new CRecordHours
{
WorkHoursHistory = w,
Renewal = r
};