C#列表按降序排序

180

我想要按照Product.Name降序排序获得一个List列表

类似于下面函数按照升序排序,只不过是相反的顺序。这个可行吗?

var newList = list.OrderBy(x => x.Product.Name).ToList();

1
我认为他的意思是它不接受“descending”关键字,因为他没有以“from x in list…”开头表达式。 - StriplingWarrior
1
抱歉,我没有完全复制那段代码,而是从记忆中输入的。我的实际代码可以工作,但只返回一个按升序排序的列表。 - PFranchise
7个回答

314
当然可以:
var newList = list.OrderByDescending(x => x.Product.Name).ToList();

文档:OrderByDescending(IEnumerable, Func)

回应您的评论:

var newList = list.OrderByDescending(x => x.Product.Name)
                  .ThenBy(x => x.Product.Price)
                  .ToList();

2
那么你的编辑将按名称排序(从z到a),然后按价格(低->高)排序吗? - PFranchise
14
是的,那是正确的。调用 OrderBy 或 ThenBy 方法时,结果总是升序排列。若要降序排列,则需使用 OrderByDescending 和 ThenByDescending 方法。 - StriplingWarrior

26

16
var newList = list.OrderBy(x => x.Product.Name).Reverse()

这应该能完成任务。


13
list.OrderByDescending();

对我有效。


4
这个语句对列表进行降序排列,然后返回一个新的已排序的列表。 - Almo

4

看一下我的项目中的代码:

我正在尝试根据模型内部的属性对列表进行重新排序。

 allEmployees = new List<Employee>(allEmployees.OrderByDescending(employee => employee.Name));

但是当存在大小写字母时,我遇到了一个问题,为了解决它,我使用了字符串比较器。

allEmployees.OrderBy(employee => employee.Name,StringComparer.CurrentCultureIgnoreCase)

1

对列表进行降序排序的两种方法

方法1 使用OrderByDescending()根据指定的键进行排序

List<Product> myList = new() {
    new Product("A"),
    new Product("Z"),
    new Product("C")
};
myList = myList.OrderByDescending(x => x.Name).ToList();
Debug.WriteLine(
    $"{myList[0].Name}" + // 'Z'
    $"{myList[1].Name}" + // 'C'
    $"{myList[2].Name}"   // 'A'
);

示例产品

class Product
{
    public string Name { get; private set; }
    public Product(string Name)
    {
        this.Name = Name;
    }
}

方法二:升序排序并使用 Reverse() 函数

myList = myList.OrderBy(x => x.Name).ToList();
myList.Reverse();

Reverse() 对于像 List<string> 这样的通用类型非常方便。

反转排序字符串列表

List<string> stringList= new() { "A", "Z", "C" };
stringList.Sort();
stringList.Reverse();

-2
list = new List<ProcedureTime>(); sortedList = list.OrderByDescending(ProcedureTime=> ProcedureTime.EndTime).ToList();

这对我来说很有效,可以按降序显示时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接