linq to sql如何连接多个列和一些条件

时间:2012-03-15 14:16:40

标签: linq

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,仍会出现错误“连接子句中某个表达式的类型不正确......”

2 个答案:

答案 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
    };