首页 > 解决方案 > 列出 OrderBy 值 < 值

问题描述

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

  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 但我无法让它工作。

标签: c#listlinqexpressionsql-order-by

解决方案


您可以使用

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 小提琴


推荐阅读