2011-09-05 5 views
-2

목록을 주문하는 방법에 문제가 있습니다. 제품 목록이 있으며 가격별로 정렬합니다. 하지만 내 DB에는 두 가지 가격이 있습니다 : 가격과 제안.목록의 문제로 주문 (linq 관련)

나는 가격 내 제품을 정렬 할,하지만 제안은 다음> 0 인 내가이 생각을 제공

으로 정렬하고 싶지만 그것이 작동하지 않는 경우

list.OrderBy(p => p.offer != 0 ? p.offer : p.price); 

어떤 아이디어가? ?

+2

왜 작동하지 않는 이유는 무엇입니까? 오류가 무엇입니까? 예상 결과와 실제 결과는 무엇입니까? – Smudge202

+0

@ Smudge202 제안 값을 고려하지 않은 가격으로리스트를 작성합니다 – mathew

+0

사용하는 코드가 정확히 그런 식으로되어 있습니까? –

답변

1

누군가가 말한 것처럼 OrderBy은 정렬되지 않습니다. IOrderedEnumerable을 반환합니다 (이는 IEnumerable과 유사하지만 주문한 사람 :-)).

당신이 자리에 정렬 할 경우 (당신은 List<> 사용하는)이 수행

list.Sort((p, q) => (p.offer != 0 ? p.offer : p.price).CompareTo(q.offer != 0 ? q.offer : q.price)); 
+0

이것도 작동합니다! 아주 좋은 코딩 m8. 감사! – mathew

1

OrderBy 내부 정렬은 수행되지 않습니다. 원본을 수정하지 않고 순서가 지정된 시퀀스를 반환합니다. 당신은 결과에 할당해야합니다

var sortedList = list.OrderBy(p => p.offer > 0 ? p.offer : p.price).ToList(); 
+0

Nope .. 여전히 제안 가치를 고려하지 않습니다 – mathew

+0

@mathew : 제가 게시 한 코드는 http://www.ideone.com/H3etj입니다. 어쩌면 내가 요구 사항을 잘못 이해했거나 어딘가에 다른 문제가있을 수 있습니다. –

1

은 아마 당신이 제공하는 동일 최종 가격라는 필드가 포함 된 새 목록을 만들 수 있습니다를, 그렇지 않으면 가격으로 제공> 0. 그런 다음 정렬하고 최종 목록을 가져옵니다.

var new_list = list.Select(element => new { new_price = element.offer > 0 ? element.offer : element.price, element }); 
var ordered_new_list = new_list.OrderBy(element => element.new_price); 
var ordered_List = ordered_new_list.Select(element => element.element); 
+0

매력처럼 일했습니다! 감사합니다 – mathew

+0

이 코드의 동작이 게시 된 원본 코드 (누락 된 할당 제외)와 어떻게 다른지는 알 수 없습니다. 나 한테 계몽을 해줄까요? 내가 여기서 무엇을 놓치고 있니? –