LINQ to SQL复杂连接具有混合条件

我有一个SQL语句,我试图转换为LINQ to 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是可用action的列表。 ActionStatus是状态列表的索引 – 4 ==’失败’。

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

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

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

 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并根据需要进行优化。