【发布时间】:2014-01-24 11:37:43
【问题描述】:
我正在使用 MongoDB C# Linq 驱动程序对搜索结果进行排序,以便在屏幕上的列表中显示。我希望能够按值可以为空的列排序,但始终在底部显示空值。这可以通过以下代码将 Linq 与内存中的集合一起使用:
items.OrderByDescending(d => d.AppointmentTime.HasValue).ThenBy(d => d.AppointmentTime);
但是,当我尝试使用 MongoDB C# 驱动程序执行此操作时,出现异常:
NotSupportedException: Unable to determine the serialization information for the expression: (d.AppointmentTime.HasValue).
我尝试使用 != null 而不是 HasValue,但这也不起作用。有没有办法说服 mongo 以这种方式缺少价值来订购?
编辑:应该说这是一个日期时间?我们正在处理的值。我试过了
items.OrderByDescending(d => d.AppointmentTime ?? DateTime.MinValue)
但这会产生类似的 NotSupportedException。
【问题讨论】:
-
如果你尝试这个会发生什么?
items.OrderByDescending(d => d.AppointmentTime ?? 0) -
那甚至无法编译 - AppointmentTime 是一个 DateTime 对象,所以?? 0 是比较 DateTime 和一个 int。对不起,也许应该说清楚。顺便说一句,我试过了?? DateTime.MinValue,同样的 NotSupportedException
-
啊,由于 AppointmentTime 的名称,我认为它可能是一个 int。您是否尝试过 items.OrderByDescending(d => d.AppointmentTime) 并看到没有进行空检查的结果?
-
是的,我已经尝试过了——它的工作方式符合您的预期。当您订购降序时,它会按日期顺序下降,底部有空值(很好),但是当您执行逆序和升序时,您会得到顶部的空值和底部的实际值 - 我希望空值始终位于底部和实际日期按升序或降序排列的结果。
-
我认为这是不可能的。但是,您可以首先仅查询空文档,然后使用 orderBy 查询其他文档
标签: c# linq mongodb sorting nullable