2012-03-15 2 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 
           }; 

Как реализовать a + 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 
    };