2012-05-11 2 views
1

Я новичок в мире Linq и я не могу понять, как преобразовать следующий SQL в LINQ из-за какой-то ограничить в базе данных, которые влияют на добавление некоторых полей мне нужно:Перевод SQL в Linq

select sp.SessionID, 
    sp.SessionParticipationID, 
    case when z.SessionParticipationID = sp.SessionParticipationID then 1 else 0 end as RecordedFL 
from SessionParticipation sp 
inner join (
    select sp1.SessionID, 
     sp1.SessionParticipationID 
    from Meeting.SessionParticipation sp1 
    inner join RegistrantActivity ra on ra.SessionParticipationID = sp1.SessionParticipationID 
    where ra.RegistrantID = 12345 
) z on z.SessionID = sp.SessionID 

Субъектами являются SessionParticipation и RegistrantActivity

+1

Проведите здесь немного времени (http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b). Вы узнаете, что вам нужно знать. –

+0

Я уже был там, и я не видел никакого способа реплицировать регистр case в linq – user1286550

+0

@ user1286550: если вы боретесь с ** случаем **, пожалуйста, возьмите на себя этот лут ** http: // lancefisher .net/blog/archive/2008/05/07/linq-to-sql --- case-statements.aspx ** –

ответ

1

это должно быть что-то вроде

from sp in SessionParticipations 
join z in 
(from sp1 in MeetingSessionParticipations 
join ra in RegistrantActivities on sp1.SessionParticipationID equals 
            ra.SessionParticipationID 
where ra.RegistrantID = 12345 
select sp1) 
on sp.SessionID equals z.SessionID 
select new { 
      sp.SessionParticipationID, 
      RecordedFL = z.SessionParticipationID == sp.SessionParticipationID 
          ? 1 : 0 
      } 

при условии, что Meeting.SessionParticipation является другой таблицы в другой схеме, чем SessionParticipation, в противном случае соединение делает вещи бесполезно сложными. (Хотя идентичные имена таблиц в разных схемах ... путают).

+0

Спасибо, теперь я понимаю. В Linq нет оператора Case, но я могу использовать оператор?:. – user1286550