通过数据表中的起始日期查找行

本文关键字:日期 查找 数据表 | 更新日期: 2023-09-27 17:49:21

我有一个具有以下结构的数据表(显示一个员工的示例数据):

Employee    Date        PayRate
--------------------------------
123         1/1/2015    15.00
123         1/1/2014    14.50
123         1/1/2013    14.00

我需要能够使用"截至"日期来选择给定任何给定日期的工资率。所以如果我输入emp# 123和1/5/2014,我应该得到14.50美元。如果我输入emp# 123和7/8/2013,我应该得到14.00美元,如果我使用emp# 123和今天的日期,我应该得到15.00美元,以此类推。

我知道如何在纯SQL中做到这一点,但我在纯System.Data.DataTable中做到这一点的方法卡住了。我离开开发有一段时间了,从来没有学会使用LINQ(我怀疑用LINQ很容易做到)。

我想到了循环遍历表的方法,直到我找到第一个日期小于我的"截至"日期匹配雇员#的记录,但这似乎是一个非常不优雅的方式来处理这个问题。

我也想过用

DataTable.Select("Date > #" + AsOfDate.ToString("MM/dd/yyyy") + "#", "AsOfDate");

获取DataRow[]数组,如果返回的行数超过0,则选择第一个值,但这似乎也是一种hack。

目前的标准/最佳实践/推荐方法是什么?

如果有关系,我使用。net 4.5

通过数据表中的起始日期查找行

按日期降序排序,查找数据小于参考日期的第一行:

DataTable.AsEnumerable()
         .Where(r => r.Field<int>("Employee") == 123)
         .OrderByDescending (r => r.Field<DateTime>("Date"))
         .FirstOrDefault (r => r.Field<DateTime>("Date") < new DateTime(2013, 7, 8) )