我想使用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)
在幕后,您的解决方案可能与此非常接近.但是,我敢打赌,如果您对它进行基准测试,那么它会更快一些,因为它没有将第一个数据集中的每个项目与第二个数据集中的每个项目联接起来,如果其中任何一个(或两个)数据集真的很大,这可能是一个灾难.
| 归档时间: |
|
| 查看次数: |
11920 次 |
| 最近记录: |