按列表中的问题排序(linq相关)

时间:2011-09-05 14:42:50

标签: asp.net-mvc linq list

我对如何订购列表有疑问。 我有一个产品清单,我按价格对它们进行排序。但在我的数据库中我有两个价格:价格和报价。

我想按价格对产品进行排序,但如果报价> 0,那么我想按报价排序

我想到了这一点,但它不起作用:

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

任何想法??

3 个答案:

答案 0 :(得分:1)

OrderBy未就地排序。它返回有序序列而不修改原始序列。您需要分配结果:

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

答案 1 :(得分: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);

答案 2 :(得分:1)

正如有人所说,OrderBy没有排序。它返回一个IOrderedEnumerable(它类似于IEnumerable,但是命令:-))。

如果您想进行排序(并且您使用的是List<> ),请执行以下操作:

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