我在VB.Net中有这个选择:
Dim thisMonthQuery =
From email In DataTablePickers.AsEnumerable() _
Where (email.Field(Of DateTime?)("GenDateScheduled") IsNot Nothing _
AndAlso email.Field(Of DateTime?)("GenDateScheduled") >= New DateTime(curYear, curMonth, 1)) _
Or (email.Field(Of DateTime?)("GenDateCreated") IsNot Nothing _
AndAlso email.Field(Of DateTime?)("GenDateCreated") >= New DateTime(curYear, curMonth, 1)) _
Select email
我需要按日期订购结果。但是,我有两个日期字段,我想要订购的字段可能是NULL。我想通过GenDateScheduled订购,但如果GenDateScheduled是NULL,我想通过GenDateCreated订购。像这样:
Order By (email.Field(Of DateTime)("GenDateScheduled") IsNot Nothing ? email.Field(Of DateTime)("GenDateScheduled") : email.Field(Of DateTime)("GenDateCreated"))
但该行不起作用,它不是有效的VB.Net代码。我该如何做到这一点?
答案 0 :(得分:1)
您所描述的是“按顺序排列”的方法。在LINQ中,我相信它是通过一个简单的逗号分隔的订单字段列表来完成的:
Order By email.Field(Of DateTime)("GenDateScheduled"), email.Field(Of DateTime)("GenDateCreated")
毕竟,请考虑逻辑上“可能为NULL”的含义。 某些记录可能为NULL。但是,您不对单个记录进行排序,而是对整个记录集进行排序。所以有些人可能在该字段中有NULL值,有些可能没有。因此,如果您按该字段排序,则所有NULL值将位于排序中的相同位置。
要对该位置(以及多个记录具有相同排序值的任何其他位置)中的记录进行排序,只需按其他值排序即可。这是排序中使用的第二列。