2016-12-15 125 views
0

我试图将这个SQL查询转换为linq查询,但没有多少运气。使用case语句与linq连接

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我必须加入,因为我定义了系统安全性,只有那些有权访问的人才能查看代码。我正在使用实体框架,不确定'导航属性'是什么意思。我在模型中添加我的表格,然后使用c#来检索我需要的信息 –

回答

0

我不能直接回答我的问题,但我找到了一个解决方法。

我用linq来代替调用存储过程,并且工作正常。

为此:

1)保存代码作为接受名为username 2)添加一个参数的SP到实体框架模型 3)用所说的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