具有混合条件的LINQ到SQL复杂联接

本文关键字:SQL 复杂 LINQ 混合 条件 | 更新日期: 2023-09-27 18:00:39

我有一个SQL语句,我正试图将其转换为LINQ到SQL,并且我已经成功地将其转换了大部分,但遇到了一个在LINQ中无法理解的语句。

SQL查询中令人头疼的部分是:

SELECT *
FROM step
INNER JOIN action on 
    (step.NextAction = action.ID and step.ActionStatus != 4) or 
    (step.ACTION = action.ID and step.ActionStatus = 4)

step是包含动作序列的表,action是可用动作的列表。ActionStatus是状态列表的索引-4=="失败"。

基本上,对于而不是失败的操作,它需要返回下一个操作。如果操作有失败,则返回当前操作。

这只是连接中的一个(整个查询中总共有10个表),其中大多数是直接的等连接,有些是在多个条件下,但我能够在LINQ中毫无问题地编写它们。不过,我看不出它会是怎么写的。

我看到了这个答案,但也不知道如何在这种情况下应用它。有什么想法吗?

具有混合条件的LINQ到SQL复杂联接

from s in step
from a in action
where (s.NextAction = a.ID && s.ActionStatus != 4) || (s.Action = a.ID && s.ActionStatus = 4)
select new { Step = s, Action = a };

您可能需要查看生成的SQL,并在需要时进行优化。