我见过类似下面的代码:
collection.OrderBy(x => x.StartDate == null ? 0 : 1).ThenBy(x => x.CreatedDate).To list();
我已经用谷歌搜索并搜索了这个网站,但找不到任何解释。通常我按属性名称按集合中的字段排序。
有人可以用简单的英语向我解释这是做什么的吗?我理解三元表示如果 StartDate 为空,则按 0 排序,否则按 1 排序。这对我来说没有意义。
谢谢。
本质上是按
CreatedDate
点餐,但是分两组。首先是StartDate
是null
的组,然后是StartDate
不是null
的组。
这创建了两个“组”:
.OrderBy(x => x.StartDate == null ? 0 : 1)
所以首先你有
StartDate
是null
的所有记录,然后是所有不是null
的记录。然后每个“组”内的二级顺序是CreatedDate
:
.ThenBy(x => x.CreatedDate)
所以用简单的英语可以描述为:
显示所有没有
的记录,按StartDate
排序,然后是所有带有CreatedDate
的记录,按StartDate
排序。CreatedDate
.OrderBy(x => x.StartDate == null ? 0 : 1)
将把没有 StartDate
的项目作为输出的第一个,基本上将集合“拆分”为两个“组”,然后对于每个“组”,通过 CreatedDate
应用 .ThenBy(x => x.CreatedDate)
的附加排序。
IComparable
文档:
根据定义,任何对象比较大于(或遵循)
,并且两个空引用相互比较相等。null
但是如果您实际上是在查询数据库 -
null
的顺序不是标准化的并且取决于数据库(例如,例如 AFAIK EF Core 通常会尝试翻译这些东西以便它们与 LINQ-to 一致-对象/运行时行为)但在这种情况下过于明确不应该受到伤害。