嵌套LINQ查询,用于选择列表中的"上一个"值

nsw*_*art 6 c# linq

我有一份日期清单.我想查询列表并返回第一项是日期的对列表,第二项是第一个日期之前(在列表中)的日期.

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

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

SELECT Date, 
    (SELECT MAX(Date)
    FROM Table AS t2
    WHERE t2.Date < t1.Date) AS PrevDate
FROM Table AS t1
Run Code Online (Sandbox Code Playgroud)

RMa*_*lke 5

将当前查询转换为LINQ查询很容易:

var result = table.Select(x =>
    new
    {
        Date = x.Date,
        PrevDate = table.Where(y => y.Date < x.Date)
                        .Select(y => y.Date)
                        .Max()
    });
Run Code Online (Sandbox Code Playgroud)