我对如何订购列表有疑问。 我有一个产品清单,我按价格对它们进行排序。但在我的数据库中我有两个价格:价格和报价。
我想按价格对产品进行排序,但如果报价> 0,那么我想按报价排序
我想到了这一点,但它不起作用:
list.OrderBy(p => p.offer != 0 ? p.offer : p.price );
任何想法??
答案 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));