2011-12-08 2 views
7

제출 된 카테고리가 들어있는 클래스 Offer이 있습니다.특정 값이 맨 위에 오도록 목록을 정렬하십시오.

특정 카테고리의 모든 쿠폰을 맨 위에 표시하고 나머지는 모두 표시하려고합니다.

나는 이것을 시도했지만 아무 소용이 없다. 무엇을 권 하겠는가? 당신은 부울 값 false으로 주문하면

Offers = Offers.OrderBy(x => x.Category == "Corporate").ToList(); 
+0

"사용할 수 없음"이라고 말하면 그 표현식의 결과는 무엇입니까? 그게 뭐가 잘못 됐어? –

+0

http://stackoverflow.com/questions/728319/linq-orderby-against-specific-values ​​ –

+1

제대로 분류하지 못했지만 여전히 원래 순서대로있는 것으로 보입니다. – Wesley

답변

19

(0) true 앞에 오는 (1). 술어와 일치하는 요소를 얻으려면 먼저이 OrderByDescending을 사용하여 정렬 순서를 반대로해야합니다

Offers = Offers.OrderByDescending(x => x.Category == "Corporate").ToList(); 
+0

+1 좋은 해결책 –

+0

어,하지만 이것도 다른 모든 순서를 뒤집을 것입니다. 대신'OrderBy (x => x.Category! = "Corporate")'를 시도하십시오. –

+3

+1. 그리고 아마도 ThenBy (x => x.Category)를 추가하여 범주 이름별로 나머지 제안을 정렬하십시오. –

10

C# Language Specification 5.0truefalse 값에 대한 바이트 표현을 지정하지 않습니다. 따라서 true1으로 표시된다고 가정하지 않는 것이 좋습니다. 또한 부울 식 x.Category == "Corporate"으로 정렬 한 결과는 분명하지 않습니다. true도 음수 값으로 나타낼 수 있습니다. 따라서 세 가지 연산자를 사용하여 명시 적으로 정렬 값을 지정합니다.

Offers = Offers 
    .OrderBy(x => x.Category == "Corporate" ? 0 : 1) 
    .ThenBy(x => x.Category) 
    .ThenBy(x => x.Date) // or what ever 
    .ToList(); 
관련 문제