Подтвердить что ты не робот

LINQ присоединяется к OR

Я хочу сделать 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)

и это работает, но кажется, кажется, взломанным. Есть ли способ лучше?

4b9b3361

Ответ 1

Предложение where применяет логическое условие, поэтому, используя "||", это путь. Вы можете связать несколько предложений, но я считаю, что это даст вам операцию "и", а не "или".

Ответ 2

Я тоже боролся с этим, пока не нашел следующее решение, которое хорошо отразилось на моей ситуации:

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;

Под крышками ваше решение, вероятно, работает очень близко к этому. Тем не менее, я уверен, что это немного быстрее, если вы сравниваете его, так как он не присоединяется к каждому элементу в первом наборе данных с каждым элементом во втором наборе данных, что может быть катастрофой, если набор данных (или обоих) был действительно большим.