嵌套LINQ查询以选择';上一个';值

本文关键字:上一个 选择 LINQ 查询 嵌套 | 更新日期: 2023-09-27 17:59:05

我有一个日期列表。我想查询列表并返回一个配对列表,其中第一项是日期,第二项是(列表中)第一个日期之前的日期。

我知道这可以很容易地通过排序列表和按索引获得相应的日期来实现,我很好奇如何在LINQ中实现这一点。

我在SQL中使用以下查询完成了这项操作:

SELECT Date, 
    (SELECT MAX(Date)
    FROM Table AS t2
    WHERE t2.Date < t1.Date) AS PrevDate
FROM Table AS t1

嵌套LINQ查询以选择';上一个';值

将当前查询转换为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 });