2014-04-08 67 views
0

這個sql查詢非常簡單。它檢索所有預定藝術家生病的所有音樂會的身份(不包括某些特定類型的音樂會)。將簡單的SQL查詢轉換爲LINQ

我試圖將其轉換爲LINQ表達式,但我完全卡住了。希望有人能幫助我。

(表ArtistConcert只是連接ConcertArtist

select ac.concertID 
from 
    ArtistConcert ac 
    join Concert c on c.ConcertID = ac.ConcertID 
    join Artist a on a.artistID = ac.artistID 
where 
    a.IsSick = 1 and c.TypeID not in (1,2,3) 
    and 
    c.StartTime > getdate() 
    and not 
    exists 
    (
     select _a.artistID from ArtistConcert _ac 
     join Concert _c on _c.ConcertID = _ac.ConcertID 
     join Artist _a on _a.artistID = _ac.artistID   
     where _c.concertID = c.concertID and _a.IsSick = 0 
    ) 
+0

那你試試? – Bonifacio2

+0

拉姆達的表達只會讓您感到尷尬 – user3510519

+0

解決您所面臨問題的嘗試非常積極地被SO社區看到。即使它很笨拙。 :) – Bonifacio2

回答

1

假設你的datacontext是ctx

var typeIds = new[] {1,2,3}; 

var query = from ac in ctx.ArtistConcert 
      join c in ctx.Concert on ac.ConcertID equals c.ConcertId 
      join a in ctx.Artist on ac.artistID equals a.artistID 
      where a.IsSick == 1 && !typeIds.Contains(c.TypeId) 
      && c.StartTime > DateTime.Now 
      && !ctx.ArtistConcert.Any(_ac => _ac.ConcertID == c.ConcertId 
              && ctx.Artist.Any(_a => _a.artistID == _ac.artistId 
                    && _a.isSick == 0)) 
      select ac.ConcertId; 
+0

非常感謝!我被困在SQL「存在」部分。 :) – user3510519

+0

如何將答案標記爲「答案」,以便每個人都可以看到問題已解決? (對不起,我在這個網站的第一天) – user3510519

+0

@ user3510519點擊答案旁邊的灰色複選標記,參見[幫助](http://stackoverflow.com/help/someone-answers) –