我有以下表格和数据:
Date |Symbol|Return
Jan 1 | A | 1%
Jan 2 | A | 2%
Jan 3 | A | 4%
Jan 5 | A | 0%
Jan 6 | A | -1%
Jan 7 | A | -3%
Jan 8 | A | 5%
该表已按升序排序。我要完成的是查询最后/最新 3条记录,并按日期按升序顺序排序:
Date |Symbol|Return
Jan 6 | A | -1%
Jan 7 | A | -3%
Jan 8 | A | 5%
这是我的代码:
Dim ReturnArray = (From row In DT_Symbols.AsEnumerable()
Where row.Field(Of String)("Symbol") = Symbol.Key 'Dictionary Key
Take 3
Select row.Field(Of Double)("Return")).Distinct()
上面的问题是当我Order By row.Field(Of Date)("Date") Ascending
我得到Jan1,Jan2,& 1月3日的日期,这不是我想要的。
当我按row.Field(Of Date)("Date") Descending
订购时 - 我的订单日期正确(1月6日,7日和8日)但错误(1月8日,7月6日)。
你能建议一个解决方法吗?
谢谢!
答案 0 :(得分:1)
考虑修改您的代码:
Dim ReturnArray =
(From row In DT_Symbols
Where row.Field(Of String)("Symbol") = Symbol.Key 'Dictionary Key
Take 3
Select row.Field(Of Double)("Return")).Distinct().ToList().Reverse()
您不应该在开始时致电AsEnumerable()
。最后,我们调用ToList()
执行查询并返回3个不同的结果,然后使用Reverse()
对它们进行降序排序(正如Andrei建议的那样)。
答案 1 :(得分:0)
使用Skip。
Dim ReturnArray = (From row In DT_Symbols
Where row.Field(Of String)("Symbol") = Symbol.Key 'Dictionary Key
OrderBy Date
Skip DT_Symbols.Count - 3
Take 3
Select row.Field(Of Double)("Return")).Distinct()