在 LinQ 连接查询中使用“OR”将 SQL 适配到 LinQ

问题描述

我有一个 sql 查询,它基本上通过两个键将 MyWords 表连接到 MyTranslations 表。这是我的表格,以便更好地理解。

MyWords 表:

Id
WordString
LangType

MyTranslations 表:

Id
WordColumnAId
WordColumnBId

请注意,WordColumnAIdWordColumnBId 列是代表 {​​{1}} 的 FK。 我的 sql 查询

MyWords.Id

我知道乍一看将 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 上还是WordColumnAId

问题

我正在尝试将上述 T-sql 查询调整为 LinQ 查询。问题是我无法在 LinQ 中找到在单个连接查询中使用两个键的方法

这是我到目前为止所得到的:

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,};