Linq:日期小于 x,但下一个记录日期大于 x

Linq: Date less that x, but next record date is greater that x

我在数据库中得到了记录。每条记录都有字段 "Date"。 对于给定的日期=x,我需要找到日期值小于 x,但下一个记录日期大于 x 的记录。

示例:

id  date
--------------
1   12.03.2013
2   15.03.2013
3   18.03.2013

现在,我得到了 X=16.03.2013,我需要一个 LINQ return 这条记录:

 2  15.03.2013

但是!对于 X=15.03.2014 它应该 return 什么都没有(因为有记录的日期较小,但下一条记录的日期与 X 完全相同)

我该怎么做?

IMO 最简单的方法就是找到它 找到的记录,然后检查日期:

var result = db.Table
               .Where(x => x.Date <= target.Date)
               .OrderByDescending(x => x.Date)
               .FirstOrDefault();
if (result != null && result.Date == target.Date)
{
    result = null;
}

或者您可以在过滤到单个结果后使用辅助 Where 子句在查询中完成所有操作:

var result = db.Table
               .Where(x => x.Date <= target.Date)
               .OrderByDescending(x => x.Date)
               .Take(1)
               .Where(x => x.Date != target.Date)
               .FirstOrDefault();

请注意,如果所有值都小于 x(因此根本没有 "next" 记录),此 不会 起作用。我还没有想出办法来处理这个问题。

如果所有值都可以小于 x 那么你可以使用

var candidate = dates.Where(x => x.Date < target.Date)
                   .OrderByDescending(x => x.Date)
                   .FirstOrDefault();
    var next = dates.Where(x => x.Date >= target.Date)
                   .OrderBy(x => x.Date)
                   .FirstOrDefault();
     return (candite != null && next != null && next.Date != target.Date) ? candidate : null