linq到sql如何在多个列上连接以及某些条件
如何实现a+1等于b?即使在我删除linq到sql如何在多个列上连接以及某些条件,linq,Linq,如何实现a+1等于b?即使在我删除+1时,仍然会出现这样的错误:“join子句中的一个表达式的类型不正确…”类似这样的错误: var recordhoursQuery = from w in crnnsupContext.WorkHoursHistories join p in crnnsupContext.ProvStates on w.Province equals p.ProvinceStateID
+1
时,仍然会出现这样的错误:“join子句中的一个表达式的类型不正确…”类似这样的错误:
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
};
您收到该错误是因为您的匿名类型不同。对于
工作时间历史记录
您使用的是工作年
,但是对于续订
您使用的是续订年
。对于两者,RegNumber
是相同的,因此不需要为其指定新名称
要修复此问题,请将匿名类型更改为:
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
};
通常,您可以更改其中一种类型以确保名称相同,但在您的情况下,Year
更清晰。此外,如果忽略为w.WorkYear+1
分配名称,则会出现错误
new { Year = w.WorkYear + 1, w.RegNumber } equals
new { Year = r.RenewalYear, r.RegNumber }