如何使用VB.Net根据数据集中的最近日期返回对应数值
VB.NET 实现方案
前置说明
你需要先把源数据加载到可遍历的容器中,以下提供两种最常用场景的实现代码,均基于LINQ实现,使用前需要先引入命名空间:Imports System.Linq
场景1:数据存储在DataTable中
' dt为存储了你的业务数据的DataTable实例 If dt Is Nothing OrElse dt.Rows.Count = 0 Then Return 0 End If ' 按MyDate降序排序,取第一条即为最近日期对应的行 Dim latestRow = dt.AsEnumerable() _ .OrderByDescending(Function(r) r.Field(Of Date)("MyDate")) _ .FirstOrDefault() Return If(latestRow IsNot Nothing, latestRow.Field(Of Decimal)("MyValue"), 0)
注意:如果你的MyDate字段在DataTable中为字符串存储,需要先转换为日期类型再排序,将排序逻辑改为:OrderByDescending(Function(r) CDate(r.Field(Of String)("MyDate")))
场景2:数据存储在自定义类集合中
首先你如果已经定义了对应数据结构的类:
Public Class DataItem Public Property MyDate As Date Public Property MyValue As Decimal End Class
假设你有List(Of DataItem)类型的集合实例dataList,实现代码如下:
If dataList Is Nothing OrElse dataList.Count = 0 Then Return 0 End If Dim latestItem = dataList _ .OrderByDescending(Function(item) item.MyDate) _ .FirstOrDefault() Return If(latestItem IsNot Nothing, latestItem.MyValue, 0)
原有代码问题说明
你之前的代码只声明了单个myDate变量,没有和全量数据集关联,自然无法拿到整个数据集的最大日期,以上方案通过对全量数据按日期倒序排序,取首行即可直接拿到最近日期对应的数值。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

