2011-09-05 25 views
-2

我在如何訂購列表時遇到問題。 我有一個產品清單,我按價格排序。但在我的分貝,我有兩個價格:價格和報價。按列表中的問題排序(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

沒有..仍然沒有考慮報價值 – 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

我不明白這段代碼的行爲應該如何與發佈的原始代碼(除了缺失的賦值之外)有所不同。照顧開導我?我在這裏錯過了什麼? –