2013-06-17 10 views
7

Я интересно, если кто-то знает, как выразить в Entity Framework, что это будет в чистом SQL:Entity рамки OrderBy «СЛУЧАЙ, КОГДА»

SELECT Name, IsEmployee, IsQualityNetwork 
FROM Person 
ORDER BY CASE WHEN IsQualityNetwork = 1 or IsEmployee = 1 THEN 0 ELSE 1 END, Name 

Я попытался с помощью Linq Dynamic, но когда этот код выполняется:

var p = ctx.People 
    .OrderBy("CASE WHEN IsQualityNetwork = 1 or IsEmployee = 1 THEN 0 ELSE 1 END") 
    .OrderBy(e => e.Name); 

я получаю исключение:

ответ

6
var p = ctx.People.OrderBy(p => (p.IsQualityNetwork == 1 || p.IsEmployee == 1) ? 0 : 1) 
        .ThenBy(p => p.Name); 
1

Вот перевод вашего SQL в LINQ { «нет свойство или поле„ДЕЛО“по типу„Человек“не существует»}.

var query = from p in ctx.People 
      let order = p.IsQualityNetwork || p.IsEmployee ? 0 : 1 
      orderby order, p.Name 
      select new 
      { 
       p.Name, 
       p.IsEmployee, 
       p.IsQualityNetwork, 
      } 

Я использовал свободно синтаксис запроса, так что я мог бы показать вам let ключевое слово. let позволяет объявить переменную диапазона, которая затем может быть повторно использована в вашем запросе, это может быть очень полезно, если у вас есть условие, которое используется во многих местах, или если вам нужно связать несколько условностей.

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