列表顺序按值<值

时间:2019-05-14 08:25:04

标签: c# list linq expression sql-order-by

我得到了一个包含价格(最低,平均,最高)的类的列表。 现在,我要订购列表:

  1. 最低<平均=第一个条目|在所有条目按最低顺序排列之后
  2. 最低<平均条目,按最低值与平均值之间的最高差排序

示例:

(unordered: low,avg,high)

{1, 2, 5}

{4, 3, 7}

{2, 5, 6}

{2, 1, 3}

(ordered: low,avg,high)

{2, 5, 6} -> highest difference between low < avg

{1, 2, 5} -> low < avg

{2, 1, 3} -> lowest low while low > avg

{4, 3, 7} -> ...

这可能是一件很容易的事情,但是当我想到时,我会头疼。我尝试使用.OrderBy和.GroupBy,但无法正常工作。

1 个答案:

答案 0 :(得分:2)

您可以使用

list.OrderByDescending(x => x.Average - x.Lowest).ThenBy(x => x.Lowest).ToList();

考虑您的课程看起来像

public class price
{
   int Lowest {get; set;}
   int Average {get; set;}
   int Highest  {get; set;}
}

现在您要按条件Average - Lowest订购价格的订单清单

List<Price> prices = new List<Price>(); 

然后您可以对它进行排序

var sortedList = prices.OrderByDescending(x => (x.Average - x.Lowest)).ThenBy(x => x.Lowest).ToList();

POC:.net fiddle