2016-12-15 35 views
0

Я пытаюсь преобразовать этот запрос SQL в запрос linq, но не очень повезло.using case statement в соединении с 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

Если вы используете Entity рамочные, следует избегать присоединиться/отчетливый или каких-либо запросов на уровне SQL, вместо этого вы должны просто использовать свойства навигации –

+0

@AkashKava Мне нужно присоединиться, потому что я определяю системную безопасность, и только те люди, у кого есть доступ, должны просматривать код. Я использую Entity Framework и не уверен, что вы подразумеваете под «свойствами навигации». Я добавляю свои таблицы в Model, а затем использую C# для извлечения, что мне нужно –

ответ

0

Я не могу ответить на свой вопрос прямо, но я нашел обходной путь.

Я использовал linq, чтобы вместо этого вызвать хранимую процедуру, и это сработало нормально.

Для этого:

1) Сохранить код как хранимая процедура, которая принимает параметр с именем UserName 2) добавить SP в Entity Framework модели 3) вызова SP с помощью:

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

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

      return Json(ret, JsonRequestBehavior.AllowGet); 

     } 
    } 

Thats it, done, no scary linq !! :)

соус: Using stored procedures in LINQ

 Смежные вопросы

  • Нет связанных вопросов^_^