0

このSQLクエリをlinqクエリに変換しようとしていますが、大したことはありません。linqとの結合でcaseステートメントを使用する

SELECT DISTINCT  gen.ID 
       , gen.Name 
       , Ssec.System 
FROM    dbo.Generic Gen 
JOIN    dbo.SystemsSelected SSel 
ON     Gen.RecordID = SSel.RecordID 
JOIN    dbo.Security SSec 
ON (
      SSel.SystemA = CASE WHEN Ssec.System = '1stSystem' THEN 1 ELSE NULL END 
     OR SSel.SystemB = CASE WHEN Ssec.System = '2ndSystem' THEN 1 ELSE NULL END 
    ) 
and SSec.Username = 'myUserName' 

私は、次の記事を見て持っていたが、私のコードに例を適用することはできません。

Link join with case condition

Linq query with table joins

任意の助けをいただければ幸いです!

おかげ

+0

あなたが使用することができます[LINQPad](https://www.linqpad.net/) – NEER

+0

あなたは、エンティティフレームワークを使用している場合は、個別のまたは任意のSQLレベルのクエリ/参加することは避けてください、代わりに単にナビゲーションプロパティを使用する必要があります –

+0

@AkashKava私はシステムセキュリティを定義しており、アクセス権を持っている人だけがコードを参照する必要があるため、参加する必要があります。私はEntity Frameworkを使用していて、「ナビゲーションプロパティ」が何を意味するのかは不明です。モデルにテーブルを追加し、C#を使用して取得する必要があることを確認します。 –

答えて

0

は、私が直接自分の質問に答えることはできませんが、私は、回避策を見つけました。

代わりにlinqを使用してストアドプロシージャを呼び出し、正常に動作しました。これを行うために

1)ユーザー名 2という名前のパラメータを受け入れるストアドプロシージャなどのコードを保存します)は、Entity Frameworkのモデル 3にSPを追加)を使用してSPを呼び出します。

public JsonResult GetNewTeams(string userUserName) 
    { 
     using (YourDBNameEntities db = new YourDBNameEntities()) 
     { 

      var ret = db.SP_YourStoredProcedureName(userUserName).ToList(); 

      return Json(ret, JsonRequestBehavior.AllowGet); 

     } 
    } 

それは、それは、もう怖いlinq! :)

醤油:Using stored procedures in LINQ

関連する問題