我有一张表(日期格式为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 else 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),comparer As System.Collections.Generic.IComparer(Of TKey))As System.Data.OrderedEnumerableRowCollection(Of System.Data.DataRow)' 在System.Data.EnumerableRowCollectionExtensions'中定义。不可能是 从这些论点中推断出来。明确指定数据类型 可能会纠正此错误。
我该如何解决?
标记了c#因为我可以从c#转换它。
答案 0 :(得分:0)
OrderBy
函数采用委托或lambda函数,而不是表达式。 ConvertToDate
函数采用表达式,而不是lambda函数。
删除了不必要的括号,并使用了.Field(Of Object)
,但没有帮助(也可能是c.Field(Of DateTime)("...")
)。
dtCorporateDetails = dtCorporateDetails.AsEnumerable() _
.OrderByDescending(Function(c) If(ConvertToDate(c("admincanceldate")) > ConvertToDate(c("blocked_date")), ConvertToDate(c("admincanceldate")), ConvertToDate(c("blocked_date"))) _
.ThenByDescending(Function(c) If(ConvertToDate(c("admincanceldate")) > ConvertToDate(c("blocked_date")), ConvertToDate(c("blocked_date")), ConvertToDate(c("admincanceldate")))) _
.CopyToDataTable()