在 LinQ 连接查询中使用 'OR'(将 SQL 适配到 LinQ)

Using 'OR' inside a LinQ join query (adapting SQL into LinQ)

我有一个 SQL 查询,它基本上在两个键上将 MyWords table 连接到 MyTranslations table。这是我的 table 以便更好地理解。

MyWords table:

Id
WordString
LangType

我的翻译 table:

Id
WordColumnAId
WordColumnBId

请注意 WordColumnAIdWordColumnBId 列是代表 MyWords.Id 的外键。 我的 SQL 查询:

SELECT MyTranslations.Id 
    ,WordColumnAId
    ,WordColumnBId
    ,MyWords.WordString
    ,MyWords.LangType
  FROM MyTranslations
  join MyWords on (MyTranslations.WordColumnAId = MyWords.Id or MyTranslations.WordColumnBId = MyWords.Id)
  where MyWords.LangType !=@currentLangType

我知道乍一看将 join on 与多个键一起使用是没有意义的,但我正在尝试一个交叉查询,该查询将连接两个 table 是否键是在 WordColumnAIdWordColumnBId.

问题

我正在尝试将上面的 T-SQL 查询改编为 LinQ 查询。问题是我无法绕过 LinQ 在单个连接查询中使用两个键。

这是我目前得到的:

from translation in queryableTranslation
    join word in _myWordRepository on translation.WordColumnAId equals word.Id // This is where I want to add `or translation.WordColumnBId equals word.Id` but get errors.
    where word.LangType != currentLangType
    select new QueryResultDto {
        MyTranslationId = translation.Id,
        WordString = word.WordString,
        LanguageType = word.LangType,
        WordColumnAId = translation.WordColumnAId,
        WordColumnbId=translation.WordColumnbId,
    };

我是 LinQ 的新手,正在努力学习。 所以我的问题是:有没有一种方法可以在 LinQ 中实现这一点,还是我正在尝试不可能的事情?我也愿意接受更好的方法。

EF 和其他 LINQ 提供程序在使用此语法时应将查询转换为 INNER JOIN:

var query =
    from translation in queryableTranslation
    from word in _myWordRepository.Where(word => translation.WordColumnAId == word.Id 
      || translation.WordColumnBId = word.Id)
    where word.LangType != currentLangType
    select new QueryResultDto 
    {
        MyTranslationId = translation.Id,
        WordString = word.WordString,
        LanguageType = word.LangType,
        WordColumnAId = translation.WordColumnAId,
        WordColumnbId=translation.WordColumnbId,
    };