选择自层次结构中属于日期范围的记录

本文关键字:范围 记录 日期 属于 层次结构 选择 | 更新日期: 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之间的记录。

几个例子:

  1. 如果给定:RecordId=4和日期=2012/05/15我需要返回RecordId=1记录
  2. 如果给定:RecordId=4和日期=2012/05/25我需要返回RecordId=3的记录
  3. 如果给定:RecordId=2和日期=2012/06/10我需要返回RecordId=2的记录
  4. 如果给定:RecordId=2和日期=2012/01/01我需要返回NULL
  5. 如果给定: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
}

不确定我是否涵盖了所有的逻辑,但你应该能够从上面的代码工作:)