C# 在LinQ连接查询中使用“或”(将SQL改编为LinQ)
我有一个SQL查询,它基本上通过两个键将MyWords表连接到MyTranslations表。这是我的表格,以便更好地理解 MyWords表:C# 在LinQ连接查询中使用“或”(将SQL改编为LinQ),c#,sql,linq,sql-to-linq-conversion,C#,Sql,Linq,Sql To Linq Conversion,我有一个SQL查询,它基本上通过两个键将MyWords表连接到MyTranslations表。这是我的表格,以便更好地理解 MyWords表: Id WordString LangType MyTranslations表: Id WordColumnAId WordColumnBId 请注意,WordColumnAID和WordColumnBId列是表示MyWords.Id的FKs。 我的SQL查询: 选择MyTranslations.Id ,WordColumnAId ,WordColum
Id
WordString
LangType
MyTranslations表:
Id
WordColumnAId
WordColumnBId
请注意,WordColumnAID和WordColumnBId列是表示MyWords.Id的FKs。
我的SQL查询:
选择MyTranslations.Id
,WordColumnAId
,WordColumnBId
,MyWords.WordString
,MyWords.LangType
来自MyTranslations
在MyTranslations.WordColumnAId=MyWords.Id或MyTranslations.WordColumnBId=MyWords.Id上加入MyWords
这里是MyWords.LangType=@当前语言类型
我知道,乍一看,将join on与多个键一起使用是没有意义的,但我正在尝试一个交叉查询,该查询将连接两个表,无论该键位于WordColumnAId还是WordColumnBId上
问题
我正在尝试将上面的T-SQL查询改编成LinQ查询。问题是我无法找到解决LinQ问题的方法,在一个连接查询中使用两个键。
以下是到目前为止我得到的信息:
从queryableTranslation中的翻译
在_myWordRepositoryon translation.WordColumnAId等于word.Id//这是我要添加`or translation.WordColumnBId等于word.Id`的地方,但会出现错误。
where word.LangType!=当前语言类型
选择new QueryResultDto{
MyTranslationId=translation.Id,
WordString=word.WordString,
LanguageType=word.LangType,
WordColumnAId=translation.WordColumnAId,
WordColumnbId=translation.WordColumnbId,
};
我对LinQ非常陌生,正在努力学习。
所以我的问题是:有没有办法在LinQ实现这一点,或者我是在尝试不可能的事情?我也愿意接受更好的方法。EF和其他LINQ提供程序在使用以下语法时应将查询转换为内部联接: 变量查询= 从queryableTranslation中的翻译 来自myWordRepository.Whereword=>translation.WordColumnAId==word.Id中的word ||translation.WordColumnBId=word.Id where word.LangType!=当前语言类型 选择new QueryResultDto { MyTranslationId=translation.Id, WordString=word.WordString, LanguageType=word.LangType, WordColumnAId=translation.WordColumnAId, WordColumnbId=translation.WordColumnbId, };
这回答了你的问题吗?谢谢,链接上的答案建议我应该使用where而不是join,但不幸的是缺少两个where的用法:一个用于过滤过滤,另一个用于匹配。考虑到我对LinQ的了解非常有限,Svyatoslav的回答帮助了Moryes!这解决了我的问题,并允许我进行交叉查询。