2012-03-15 44 views
1
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,錯誤還是來了說:「聯接子句中的類型的表達式之一是不正確......」LINQ to sql如何加入多列和一些條件

回答

3

您收到的錯誤因爲你的匿名類型是不同的。對於WorkHoursHistories,您正在使用WorkYear,但對於Renewals,您正在使用RenewalYear。對於這兩個,RegNumber是相同的,所以它不需要被賦予一個新的名字。

要解決這種變化您的匿名類型是:

new { Year = w.WorkYear + 1, w.RegNumber } equals 
new { Year = r.RenewalYear, r.RegNumber } 

通常情況下,你可以改變的類型,以確保該名稱是相同的一個,但在你的情況Year更清晰。另外,如果您省略分配名稱到w.WorkYear + 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 
    };