我想使用 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
我在将该 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;
我想我可以使用:
join g in db.Games on 1 equals 1
where (t.ID == g.HomeTeamID || t.ID == g.AwayTeamID)
这可行,但似乎有点老套。有没有更好的办法?
我也为此苦苦挣扎,直到找到以下解决方案,该解决方案非常适合我的情况:
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;
在幕后,您的解决方案的工作原理可能与此非常接近。但是,我敢打赌,如果您对它进行基准测试,这个速度会更快一点,因为它不会将第一个数据集中的每个项目与第二个数据集中的每个项目连接起来,如果其中一个(或两个)数据集非常大,这可能会是一场灾难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)