c# - 具有混合条件的 LINQ to SQL 复杂连接

标签 c# sql 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 是可用操作的列表。 ActionStatus 是状态列表的索引 - 4 == 'Failed'。

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

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

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

最佳答案

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

关于c# - 具有混合条件的 LINQ to SQL 复杂连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6491661/

相关文章:

.net - 将 LINQ 数据上下文和非 linq 存储过程包装到事务中?

asp.net-mvc - ASP.NET MVC + LINQ to SQL 还是实体?

c# - Linq to Sql 设计和 MVP

c# - 开发应用程序的Windows 'class name'是什么?

c# - 如何使 mainMenuStrip 在 Windows 窗体应用程序中看起来有光泽

MySQL 在没有其他类似的情况下插入新值

java - Android sqlite数据库报错SQLiteException no such column

php - MySQL 根据条件对多个列值求和

C# 独立 WebDAV

c# - 如果说话者远离麦克风,Google Speech/NAudio 会有很大的延迟