问题描述
我有一个 sql 查询,它基本上通过两个键将 MyWords 表连接到 MyTranslations 表。这是我的表格,以便更好地理解。
MyWords 表:
Id
WordString
LangType
MyTranslations 表:
Id
WordColumnAId
WordColumnBId
请注意,WordColumnAId
和 WordColumnBId
列是代表 {{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,};