【发布时间】:2021-05-07 17:12:09
【问题描述】:
我有一个 SQL 查询,它基本上通过两个键将 MyWords 表连接到 MyTranslations 表。这是我的表格以便更好地理解。
MyWords 表:
Id
WordString
LangType
MyTranslations 表:
Id
WordColumnAId
WordColumnBId
请注意,WordColumnAId 和 WordColumnBId 列是代表 MyWords.Id 的 FK。
我的 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 与多个键一起使用是没有意义的,但我正在尝试一个交叉查询来连接两个表,无论键是在WordColumnAId 还是WordColumnBId。
问题
我正在尝试将上述 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 中实现这一点,还是我在尝试不可能的事情?我也愿意接受更好的方法。
【问题讨论】:
-
这能回答你的问题吗? Linq - left join on multiple (OR) conditions
-
谢谢,链接上的答案建议我应该使用
where而不是join,但不幸的是缺少两个wheres 的用法:一个用于过滤(消除),另一个为匹配。考虑到我对 LinQ 的了解非常有限,Svyatoslav 的回答更有帮助
标签: c# sql linq sql-to-linq-conversion