选择自层次结构中属于日期范围的记录
本文关键字:范围 记录 日期 属于 层次结构 选择 | 更新日期: 2023-09-27 18:13:01
给定如下表:
RecordId CreatedDate ParentRecordId
1 2012/05/10 NULL
2 2012/05/13 NULL
3 2012/05/20 1
4 2012/05/30 3
我需要找出驻留在创建日期给日期和RecordId之间的记录。
几个例子:
- 如果给定:RecordId=4和日期=2012/05/15我需要返回RecordId=1记录
- 如果给定:RecordId=4和日期=2012/05/25我需要返回RecordId=3的记录
- 如果给定:RecordId=2和日期=2012/06/10我需要返回RecordId=2的记录
- 如果给定:RecordId=2和日期=2012/01/01我需要返回NULL
- 如果给定:RecordId=1和日期=2012/06/01我需要返回RecordId=4的记录
我认为这将是一组复杂的连接和计算,我已经挣扎了几个小时没有任何成功。
下面是我需要实现的一个方法的模型:
public Record GetRecord(int RecordId, DateTime Date)
{
var query = ???
return query;
}
这可以通过递归解决,例如:
public Record GetRecord(int RecordId, DateTime Date)
{
var r = records.firstOrDefault(record => record.Id == RecordId && record.Date < Date)
if(r != null && r.ParentId != null)
return GetRecord(r.ParentId, Date) // Get the parent, if existing..
else
return r; // Return the matching record
}
不确定我是否涵盖了所有的逻辑,但你应该能够从上面的代码工作:)