2014-04-06 92 views
0

不斷收到錯誤結果的排序IQueryable的,當我嘗試返回更新日期不能返回日期時間

名單

Private Shared Function GetDistinctDates(ByRef ctx As ToolkitEntities, 
              ByVal symbol As String, 
              ByVal interval As Integer, 
              Optional isRangeProj As Boolean = False) As List(Of Date) 
     Dim numDates As Integer = 0 
     If isRangeProj = True Then 
      numDates = 3 
     Else 
      numDates = TakeValue(interval) 
     End If 

     Dim dates = (From data In ctx.tsintracharts 
        Where data.Symbol = symbol 
        Select data.Date).Distinct().ToList() 

     'Dim datelist As IQueryable(Of Date) = dates.OrderByDescending(Function(o) o).Take(numDates) 
     Return dates 
    End Function 

沒有排序時,將返回日期的整個列表

我已經按日期排序,都使用函數語法,並通過在Linq語句中選擇之前放置OrderBy。我只是試圖返回不同日期列表中的最新三個日期。

但是,如果我移動順序按到LINQ聲明沒有發生排序

Dim dates = (From data In ctx.tsintracharts 
        Where data.Symbol = symbol 
        Order By data.Date Descending 
        Select data.Date 
        ).Distinct() 

並返回dates.Take(numDates)事實上確實只返回三個日期。問題是他們總是最老,我需要最新的。

+0

對於初學者來說,它應該只返回三個日期(在例行程序即時測試中)並返回所有35個日期。我也不知道如何使用這樣的函數語法來升序,如果這比在LINQ語句中使用OrderBy更有效。 – dinotom

回答

0

哇,非常跛腳,但它的作品。任何能夠更好地使用這種方法的人都是我的英雄,因爲我確信有一種更好的方法來完成這個方法,而不是這個答案所描述的方法。

Private Shared Function GetDistinctDates(ByRef ctx As ToolkitEntities, 
              ByVal symbol As String, 
              ByVal interval As Integer, 
              Optional isRangeProj As Boolean = False) As List(Of Date) 
     Dim numDates As Integer = 0 
     If isRangeProj = True Then 
      numDates = 3 
     Else 
      numDates = TakeValue(interval) 
     End If 

     Dim dates As List(Of Date) = (From d In ctx.tsintracharts 
             Where d.Symbol = symbol 
             Select d.Date).Distinct().ToList() 

     Dim datelist As New List(Of Date) 
     For x As Integer = 1 To dates.Count 
      If x > (dates.Count - numDates) Then 
       datelist.Add(dates(x - 1)) 
      End If 
     Next 
     Return datelist 
    End Function 
相關問題