2014-04-06 67 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 
相关问题