LINQ与OR连接

And*_*nna 12 c# linq-to-sql

我想使用OR语句与LINQ进行JOIN.

这是我开始的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
Run Code Online (Sandbox Code Playgroud)

我无法将该ON子句转换为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;
Run Code Online (Sandbox Code Playgroud)

我想我可以用:

join g in db.Games on 1 equals 1
where (t.ID == g.HomeTeamID || t.ID == g.AwayTeamID)
Run Code Online (Sandbox Code Playgroud)

这工作但看起来似乎有点hacky.有没有更好的办法?

amm*_*s01 16

我也在努力解决这个问题,直到找到以下解决方案,这对我的情况很有用:

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;
Run Code Online (Sandbox Code Playgroud)

在幕后,您的解决方案可能与此非常接近.但是,我敢打赌,如果您对它进行基准测试,那么它会更快一些,因为它没有将第一个数据集中的每个项目与第二个数据集中的每个项目联接起来,如果其中任何一个(或两个)数据集真的很大,这可能是一个灾难.


Ami*_*t G 3

where 子句应用布尔条件,因此使用“||” 是要走的路。您可以链接多个 where 子句,但我相信这将为您提供“与”操作,而不是“或”操作。