通过截止日期在 DataTable 中查找行
Find row via As Of date in a DataTable
我有一个具有以下结构的数据表(显示一名员工的示例数据):
Employee Date PayRate
--------------------------------
123 1/1/2015 15.00
123 1/1/2014 14.50
123 1/1/2013 14.00
我需要能够使用 "As Of" 日期来 select 给定任何给定日期的工资率。因此,如果我通过 emp# 123 和 1/5/2014,我应该得到 14.50 美元。如果我输入 emp# 123 和 7/8/2013,我应该得到 14.00 美元,如果我使用 emp#123 和今天的日期,我应该得到 15.00 美元,依此类推。
我知道如何在纯 SQL 中执行此操作,但我一直坚持在纯 System.Data.DataTable 中执行此操作的方法。我已经有一段时间没有开发了,而且从来没有学会使用 LINQ(而且我怀疑在 LINQ 中很容易做到)。
我想到了循环遍历 table 的方法,直到找到第一条日期小于我的 "As-of" 日期的匹配员工#的记录,但这似乎是一种非常不雅的方式处理这个。
我也想过用
DataTable.Select("Date > #" + AsOfDate.ToString("MM/dd/yyyy") + "#", "AsOfDate");
获取 DataRow[] 数组,如果第一个值 returns 多于零行,则 select 获取第一个值,但这也似乎是 hack。
最近 standard/best practice/recommended 对此的处理方法是什么?
如果重要的话,我正在使用 .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) )
我有一个具有以下结构的数据表(显示一名员工的示例数据):
Employee Date PayRate
--------------------------------
123 1/1/2015 15.00
123 1/1/2014 14.50
123 1/1/2013 14.00
我需要能够使用 "As Of" 日期来 select 给定任何给定日期的工资率。因此,如果我通过 emp# 123 和 1/5/2014,我应该得到 14.50 美元。如果我输入 emp# 123 和 7/8/2013,我应该得到 14.00 美元,如果我使用 emp#123 和今天的日期,我应该得到 15.00 美元,依此类推。
我知道如何在纯 SQL 中执行此操作,但我一直坚持在纯 System.Data.DataTable 中执行此操作的方法。我已经有一段时间没有开发了,而且从来没有学会使用 LINQ(而且我怀疑在 LINQ 中很容易做到)。
我想到了循环遍历 table 的方法,直到找到第一条日期小于我的 "As-of" 日期的匹配员工#的记录,但这似乎是一种非常不雅的方式处理这个。
我也想过用
DataTable.Select("Date > #" + AsOfDate.ToString("MM/dd/yyyy") + "#", "AsOfDate");
获取 DataRow[] 数组,如果第一个值 returns 多于零行,则 select 获取第一个值,但这也似乎是 hack。
最近 standard/best practice/recommended 对此的处理方法是什么?
如果重要的话,我正在使用 .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) )