2014-04-04 2 views
1

안녕하세요 나는 다음과 같은 LINQ 문을했다 : 그래서 내가 "사건"에 필요"케이스"문 주문에 의해

IEnumerable<TabTransaktion> allTransactions 
    = TabTransaktions1.Union(TabTransaktions2) 
         .Where(trans => trans.TabVorgang != null). 
         .OrderBy(tran => tran.TabVorgang.Wirkdatum) 
         .OrderByDescending(trans2 => trans2.TabVorgang.ID); 

을하지만 난 단지 trans2.TabVorgang.ID 0으로 같을 때 내림차순으로 2 차를 원하는 LinQ에 대한 "order by clause". 같은 LinQ 이에 상응하는 :

SELECT BusinessEntityID, SalariedFlag 
FROM HumanResources.Employee 
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC 
     ,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END; 
GO 

나는 도움을 주셔서 감사합니다.

+1

질문이 매우 혼란스러워 보입니다. 원하는 출력으로 샘플 데이터를 제공 할 수 있습니까? – SpiderCode

+0

TabVorgang.ID = 0 인 데이터를 마침내 표시하려고합니다. 그렇지 않으면 주문을 만지고 싶지 않다. – user3114569

답변

0

SalariedFlagbool (bit의 SQL 형식) 인 것으로 가정하면 두 순서 지정 표현식은 상호 배타적입니다. 즉, 기본 쿼리는 두 개의 분리형 쿼리로 분리 될 수 있으며 최종 결과는 이들의 합집합입니다.

IEnumerable<TabTransaktion> mainQuery 
    = TabTransaktions1.Union(TabTransaktions2) 
         .Where(trans => trans.TabVorgang != null); 

var queryOne = mainQuery.Where(p=>p.SalariedFlag ==1) 
         .OrderByDescending(tran => tran.BusinessEntityID); 

var queryTwo = mainQuery.Where(p=>p.SalariedFlag ==0) 
         .OrderBy(tran => tran.BusinessEntityID); 

var finalResult = queryOne.Union(queryTwo); 
+0

나는 이것을 막하려고했다. 어쨌든 고맙습니다. – user3114569

+0

나는 이것이 실제로 무엇을 의미하는지 누군가를 혼란스럽게하지 않는다. IEnumerable mainQuery = TabTransaktions1.Union (TabTransaktions2) .Where (trans => trans.TabVorgang! = null); IEnumerable queryOne = mainQuery.Where (p => p.TabVorgang.ID! = 0) .OrderBy (tran => tran.TabVorgang.Wirkdatum); IEnumerable queryTwo = mainQuery.Where (p => p.TabVorgang.ID == 0) .OrderBy (tran => tran.TabVorgang.Wirkdatum) .ThenByDescending (trans2 => trans2.TabVorgang.ID); IEnumerable allTransactions = queryOne.Union (queryTwo); – user3114569

관련 문제