一尘不染

LINQ to SQL复合体在混合条件下联接

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是可用操作的列表。ActionStatus是状态列表的索引-4 ==’失败’。

基本上,对于 失败的动作,它需要返回 下一个 动作。如果行动 已经 失败,它返回 当前 的行动。

这只是联接之一(完整查询中总共有10个表),其中大多数都是直接等值联接,其中一些处于多种条件下,但是我已经能够用LINQ编写它们,没有问题。但是,我看不出它是怎么写的。


阅读 169

收藏
2021-03-08

共1个答案

一尘不染

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,并在需要时进行优化。

2021-03-08