我在数据库中有记录。每条记录都有字段"日期"。 对于给定的日期= x,我需要查找Date值小于x的记录,但下一个记录日期大于x。
示例:
id date
--------------
1 12.03.2013
2 15.03.2013
3 18.03.2013
现在,我得到X=16.03.2013
,我需要一个返回此记录的LINQ:
2 15.03.2013
BUT!对于X=15.03.2014
它应该什么都不返回(因为有记录的日期较小,但是下一条记录的日期与X完全相同)
我该怎么做?
答案 0 :(得分:3)
最简单的方法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
,则此不会工作(因此没有&#34;下一个&#34;记录完全) 。我还没有办法解决这个问题。
答案 1 :(得分:1)
如果所有值都小于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