LINQ to SQL сложное соединение со смешанными условиями - PullRequest
3 голосов
/ 27 июня 2011

У меня есть оператор SQL, который я пытаюсь преобразовать в LINQ to SQL, и мне удалось преобразовать большую его часть, но я столкнулся с одним оператором, который я не могу обернуть в LINQ. 1001 *

Раздел 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'.

В основном, для действий, которые не Failed, необходимо вернуть следующее действие. Если действие имеет Failed, возвращается действие current .

Это только одно из объединений (в общем запросе всего 10 таблиц), большинство из них являются прямыми эквивалентами, некоторые в нескольких условиях, но я смог написать их в LINQ без вопрос. Хотя этот, я не вижу, как это будет написано.

Я видел этот ответ, но также не вижу, как применить это в этом сценарии. Есть идеи?

1 Ответ

1 голос
/ 27 июня 2011
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 и, при необходимости, оптимизировать.

...