我有一个有 2 个日期的实体,假设这个简化的实体:
public sealed class Foo
{
public DateTime DateA { get; set; }
public DateTime DateB { get; set; }
}
我需要按照这个规则排序:
实体的日期是Foo
和DateA
中最远的一个DateB
所以我尝试写一些尊重这条规则的东西:
Builders<Foo>.Sort.Ascending(x => x.DateA > x.DateB ? x.DateA : x.DateB));
但是运行时不支持操作,有办法吗?
您无法对表达式进行排序。因此,首先创建一个具有该值的字段 - 使用 DateA 和 DateB 之间较大的日期(又名“最近”或“最新”)。
为此,您可以将 $cond
与 if-then-else 一起使用,但由于您有实际的日期类型字段,因此使用
$max
运算符更简单。
db.collection.aggregate([
{
$set: {
largestDate: { $max: ["$DateA", "$DateB"] }
}
},
{ $sort: { largestDate: 1 } },
// uncomment this step to remove the 'largestDate' field
// { $unset: "largestDate" }
])
蒙戈游乐场