VB.Net从数据表中选择:按字段1排序,如果字段1为空,则按字段2排序?

时间:2016-03-03 14:46:36

标签: asp.net vb.net date select datatable

我在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代码。我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您所描述的是“按顺序排列”的方法。在LINQ中,我相信它是通过一个简单的逗号分隔的订单字段列表来完成的:

Order By email.Field(Of DateTime)("GenDateScheduled"), email.Field(Of DateTime)("GenDateCreated")

毕竟,请考虑逻辑上“可能为NULL”的含义。 某些记录可能为NULL。但是,您不对单个记录进行排序,而是对整个记录集进行排序。所以有些人可能在该字段中有NULL值,有些可能没有。因此,如果您按该字段排序,则所有NULL值将位于排序中的相同位置。

要对该位置(以及多个记录具有相同排序值的任何其他位置)中的记录进行排序,只需按其他值排序即可。这是排序中使用的第二列。