我有一個像(日期以mm/dd/yyyy格式)排序的DataTable基於兩個專欄,取其較大
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
但我得到一個錯誤的類型參數的
數據類型(S)(S )在擴展方法'Public Function OrderByDescending(Of TKey)(keySelector As System.Func(Of)的System.Data.DataRow,TKEY的),比較器作爲 System.Collections.Generic.IComparer(OF TKEY的))作爲 System.Data.OrderedEnumerableRowCollection(OF的System.Data.DataRow)System.Data.EnumerableRowCollectionExtensions ' 中定義' '不能從這些論據推斷出 。明確指定數據類型 可能會更正此錯誤。
我該如何解決?
tagged c#因爲我也可以從c#轉換它。
我認爲問題是,你要使用VB.NET'If'內在作爲'OrderByDescending'排序功能,但這並不用VB的類型推演工作。建議嘗試將其放入lambda函數中。 – Craig