2012-05-11 58 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

我已經去過那裏了,我沒有看到任何方法可以在linq – user1286550

+0

@ user1286550中複製case語句:如果你在** case **的情況下,請在這個** 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