2013-06-17 2 views
7

가 궁금 해요 "CASE"엔티티 프레임 워크있는 OrderBy 누군가가 순수 SQL에 일 무슨 엔티티 프레임 워크에 표현하는 방법을 알고 있다면

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

내가 Linq에 동적를 사용하여 시도하지만,이 코드가 실행되는 경우 :

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

여기 LINQ로 SQL의 번역이다 { "어떤 속성 또는 필드 '사례는'형 '사람'에 존재하지 않는다"}.

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을 사용하면 쿼리에서 다시 사용할 수있는 범위 변수를 선언 할 수 있습니다. 많은 곳에서 사용되는 조건이 있거나 여러 조건을 연결해야하는 경우 매우 유용 할 수 있습니다.

관련 문제