linq到sql如何在多个列上连接以及某些条件

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

如何实现a+1等于b?即使在我删除
+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 }