C#:按可为空的 DateTime 属性对对象列表进行排序

标签 c# linq

我有一个对象列表:List<FakeObject> list = ...

每个对象都有一个 DateTime 属性,我们称它为“日期”

我想按这个日期属性降序排列这个列表。然而,当我尝试

list.Sort(new Comparison<FakeObject>((x, y) => DateTime.Compare(x.Date, y.Date)))

它提示是因为 Date 属性可以为空。

我如何对这个列表进行排序,它将可为空的日期视为最大日期,以便它出现在顶部?对我来说,快速简便的替代方法是不使日期字段可为空,但我们假设现在这不是一个选项。

简而言之:如果 DateTime 可以为 null,我如何按 DateTime 对对象列表进行排序?

最佳答案

一种可能的方法是:

list.Sort(new Comparison<FakeObject>((x, y) => 
    -DateTime.Compare(x.Date ?? DateTime.MaxValue,
        y.Date ?? DateTime.MaxValue)));

更新:在 OP 编辑​​问题以进行澄清后修改为使用 MaxDate

请注意,您可以通过任何一种方式(MinDateMaxDate)执行此操作。底线是这样的,如果它是 null 然后给它一些静态值来完成你想要的。

关于C#:按可为空的 DateTime 属性对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19733227/

相关文章:

c# - 数据访问层的反射性能

c# - mvc 客户端验证失败后聚焦的元素似乎是任意的

c# - 当控制台应用程序使用完全相同的基础库执行完全相同的事情时,什么会导致 Windows 服务挂起?

c# - 值不能为空。参数名称 : source

c# - Entity Framework 核心 : LINQ advise needed on better approach using include for relational tables

c# - SQLCE - Upsert(更新或插入) - 如何使用常用方法准备一行?

c# - 在 Unity 2D 中实现梯子

linq - 使用 WCF、LINQ、JSON 时无法序列化 'System.Linq.Enumerable... ' 类型的参数

c# - 需要有关 LINQ 查询左连接和多个字段的帮助

c# - 字典 Getter 中的参数异常