2012-03-15 7 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 equals bを実装する方法は?あなたはそのエラーを受信して​​いるlinq to SQL複数の列といくつかの条件で結合する方法

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

答えて

3

:私は+1を削除する場合でも、エラーはまだこのような

0

何か「JOIN句での式のいずれかのタイプが....間違っています」と述べてきましたあなたの匿名の種類が異なるからです。 WorkHoursHistoriesの場合はWorkYearを使用していますが、Renewalsの場合はRenewalYearを使用しています。両方の場合、RegNumberは同じ名前なので、新しい名前を付ける必要はありません。これはこれまで、あなたの匿名型を変更する修正するには

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

通常は、名前を確実にするためのいずれかのタイプを変更することができますが同じですが、あなたのケースでYearは明確です。また、w.WorkYear + 1に名前を付けることを省略すると、エラーが発生します。

関連する問題