【发布时间】:2017-06-22 04:07:41
【问题描述】:
我有一张类似(mm/DD/yyyy 格式的日期)的表格
ID blocked_date admincanceldate
.................................
1 06/06/2017 08/06/2017
1 07/06/2017 DBNULL
1 04/06/2017 09/06/2017
1 DBNULL 03/06/2017
1 02/06/2017 01/06/2017
我想根据以下条件进行排序,
如果blocked_date 大于admincanceldate,则为blocked_date,否则为admincanceldate(较大的日期),然后为较小的日期。
我正在使用VB.Net,我的查询是
dtCorporateDetails = dtCorporateDetails.AsEnumerable() _
.OrderByDescending(If((ConvertToDate(Function(c) c.Field(Of Object)("admincanceldate"))) > (ConvertToDate(Function(c) c.Field(Of Object)("blocked_date"))), (ConvertToDate(Function(c) c.Field(Of Object)("admincanceldate")))), (ConvertToDate(Function(c) c.Field(Of Object)("blocked_date")))) _
.ThenByDescending(If((ConvertToDate(Function(c) c.Field(Of Object)("admincanceldate"))) > (ConvertToDate(Function(c) c.Field(Of Object)("blocked_date"))), (ConvertToDate(Function(c) c.Field(Of Object)("blocked_date"))), (ConvertToDate(Function(c) c.Field(Of Object)("admincanceldate"))))) _
.CopyToDataTable()
和
Private Function ConvertToDate(ByVal obj As Object) As Nullable(Of Date)
Dim retDate As Date = Nothing
If Not IsDBNull(obj) Then
retDate = CDate(obj)
End If
Return retDate
End Function
但我遇到了一个错误
扩展方法“Public”中类型参数的数据类型 函数 OrderByDescending(Of TKey)(keySelector As System.Func(Of System.Data.DataRow, TKey),比较器 As System.Collections.Generic.IComparer(Of TKey)) 作为 System.Data.OrderedEnumerableRowCollection(Of System.Data.DataRow)' 不能在“System.Data.EnumerableRowCollectionExtensions”中定义 从这些论点推断。明确指定数据类型 可能会纠正这个错误。
我该如何解决?
标记为 c#,因为我也可以从 c# 转换它。
【问题讨论】:
-
我认为问题在于您试图使用 VB.NET
If内在函数作为OrderByDescending中的排序函数,但这不适用于 VB 的类型推导。建议尝试将其放在 lambda 函数中。