2011-06-27 24 views
3

私はLINQ to SQLに変換しようとしているSQL文を持っていますが、そのほとんどは変換されていますが、私の頭をLINQで包み込む。LINQ to SQL複合条件付きの複合語

頭痛を引き起こしている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) 

stepactionが可能なアクションのリストで、アクションのシーケンスを含むテーブルです。 ActionStatusはステータスのリストへのインデックスです - 4 == 'Failed'。

基本的には、ではないではないアクションの場合は、次のアクションを返す必要があります。 のアクションにが失敗した場合は、の現在のアクションを返します。

これはジョインの1つ(完全なクエリで合計10個のテーブルがあります)ですが、それらのほとんどはまっすぐ前方の同型ジョイントですが、複数の条件でのジョイントですが、LINQで問題ない。これは、しかし、私はそれが書かれる方法を見ることができません。

私はthis答えを見ただけでなく、このシナリオでそれをどのように適用するか見ることができません。何か案は?

答えて

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を見て、必要に応じて最適化することもできます。

+0

完璧、扱います!ありがとう。 – Jaymz

+0

生成されたSQLはあなたのように見えますか? –