Ответ 1
Предложение where применяет логическое условие, поэтому, используя "||", это путь. Вы можете связать несколько предложений, но я считаю, что это даст вам операцию "и", а не "или".
Я хочу сделать JOIN с 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
У меня возникли проблемы с преобразованием этого предложения 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)
и это работает, но кажется, кажется, взломанным. Есть ли способ лучше?
Предложение where применяет логическое условие, поэтому, используя "||", это путь. Вы можете связать несколько предложений, но я считаю, что это даст вам операцию "и", а не "или".
Я тоже боролся с этим, пока не нашел следующее решение, которое хорошо отразилось на моей ситуации:
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;
Под крышками ваше решение, вероятно, работает очень близко к этому. Тем не менее, я уверен, что это немного быстрее, если вы сравниваете его, так как он не присоединяется к каждому элементу в первом наборе данных с каждым элементом во втором наборе данных, что может быть катастрофой, если набор данных (или обоих) был действительно большим.