我有一个日期列表。我想查询列表并返回一个对列表,其中第一项是日期,第二项是在第一个日期之前发生的日期(在列表中)。
我知道这可以通过对列表进行排序并按索引获取相应的日期来轻松实现,我很好奇如何在 LINQ 中实现这一点。
我在 SQL 中使用以下查询完成了此操作:
SELECT Date,
(SELECT MAX(Date)
FROM Table AS t2
WHERE t2.Date < t1.Date) AS PrevDate
FROM Table AS t1
将当前查询转换为LINQ查询很容易:
var result = table.Select(x =>
new
{
Date = x.Date,
PrevDate = table.Where(y => y.Date < x.Date)
.Select(y => y.Date)
.Max()
});
List<DateTime> dates = new List<DateTime>()
{
DateTime.Now.AddDays(1),
DateTime.Now.AddDays(7),
DateTime.Now.AddDays(3),
DateTime.Now.AddDays(6),
DateTime.Now.AddDays(5),
DateTime.Now.AddDays(2),
DateTime.Now.AddDays(3),
};
dates = dates.OrderByDescending(x => x).ToList();
var result = dates.Skip(1)
.Select((x, i) => new { Date = dates[i], PreviousDate = x });