VB LINQ数据表 - 按升序排列的最新日期

时间:2015-01-22 17:37:07

标签: vb.net linq

我有以下表格和数据:

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日)。

你能建议一个解决方法吗?

谢谢!

2 个答案:

答案 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()