2009-07-21 45 views
12

我想要使用OR語句與LINQ聯接。LINQ加入或OR

這裏是SQL查詢我開始有:

SELECT t.id 
FROM Teams t 
INNER JOIN Games g 
    ON (g.homeTeamId = t.id OR g.awayTeamId = t.id) 
    AND g.winningTeamId != 0 
    AND g.year = @year 
GROUP BY t.id 

我無法轉換上子句LINQ。這是我在哪裏:

var y = from t in db.Teams 
     join g in db.Games on t.ID equals g.AwayTeamID //missing HomeTeamID join 
     where g.WinningTeamID != 0 
      && g.Year == year 
     group t by t.ID into grouping 
     select grouping; 

我想我可以使用:

join g in db.Games on 1 equals 1 
where (t.ID == g.HomeTeamID || t.ID == g.AwayTeamID) 

,這工作,但似乎有點哈克看來。有沒有更好的辦法?

回答

2

where子句應用布爾條件,所以使用「||」是要走的路。你可以鏈接多個where子句,但我相信這會給你一個「和」的操作,而不是一個「或」。

+1

我一定要用||但我希望我能把它加入JOIN。我還沒有執行它來測試什麼是sql輸出,但我已經編譯與連接1等於1和我的OR語句在where子句下。 – AndyMcKenna 2009-07-21 13:32:02

15

我這個掙扎以及直到我發現了以下解決方案,這對於我的情況運行良好:

var y = from t in db.Teams 
     from g in db.Games 
     where 
     (
      t.ID == g.AwayTeamID 
      || t.ID == g.HomeTeamID 
     ) 
      && g.WinningTeamID != 0 
      && g.Year == year 
     group t by t.ID into grouping 
     select grouping; 

在幕後,你的解決方案可能是工作非常接近這一之一。然而,我敢打賭,如果您對其進行基準測試,它會稍微快一點,因爲它不會將第一個數據集中的每個項目與第二個數據集中的每個項目連接起來,如果兩個數據集中的任何一個(或兩個)數據集非常大,則可能會造成災難。

+0

它真的會加入OP解決方案中兩個表的每一項嗎? '哪裏'不會影響它,只有符合條件的人才會加入......? – 2014-06-10 18:55:17