我有一个用C#编写的定制对象列表,我需要根据对象的多个属性对该列表进行排序.每个对象都有几个属性,我想先按PropertyA按升序排列列表,然后按PropertyB按降序排列列表.在C#中实现这一点的最有效、最干净的方法是什么?

谢谢!

我try 在LINQ中使用List.Sort()OrderBy(),但同时按多个属性排序时遇到问题.有没有人可以提供一个代码示例或为我指明正确的方向,以有效地实现这种排序?

推荐答案

在LINQ中,您可以使用OrderBy(Descending)后跟ThenBy(Descending).

Enumerable.ThenByDescending:

按降序对序列中的元素执行后续排序.

以下内容:

var sorted = myCollection
    .OrderBy(i => i.PropertyA)
    .ThenByDescending(i => i.PropertyB)
    .ToList();

将按PropertyA(升序)然后按PropertyB降序对集合进行排序,并将结果放入新列表中.

Csharp相关问答推荐

在Microsoft XNA框架(MonoGame)中旋转相机

使用GeneratedComInterfaceProperty的.NET 8 COM类对于VB 6/SYS或ALEViewer不可见

在命令行中使用时安装,但在单击时不会安装

如何定义EFCore中的多个穿透

Azure Redis缓存与Entra ID身份验证

ASP.NET Core AutoMapper:如何解决错误 CS0121调用在以下方法或属性之间不明确

调用Task.Run()与DoSomethingAsync()有什么不同?

Linux Docker上的.NET6在某个时间抛出后,在加密操作期间发生System.Security.Cryptography.CryptographicException:错误

为什么@rendermode Interactive Auto不能在.NET 8.0 Blazor中运行?

在C#.NET项目中启动时,如何等待提升的PowerShell进程退出?

如何从另一个类的列表中按ID取值

Azure Functions v4中的Serilog控制台主题

此异步方法在重写方法中缺少等待运算符警告

从GRPC连接创建ZipArchive

SharpZipLib在文件名前加上目录名,生成tar.gz

如何阻止可传递依赖项出现在项目中

SignalR跨域

与另一个对象位于同一位置的对象具有不同的变换位置

如何在.NET8中使用Blazor Web App(WebAssembly)托管服务器端控制器?

如何查找Span;T&>是否包含相同顺序的其他Span<;T&>