0

给定这样的表:

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

我认为这必须是一组复杂的连接和计算,我已经挣扎了几个小时而没有任何成功。
这是我需要实现的方法的模型:

public Record GetRecord(int RecordId, DateTime Date)
{
  var query = ???
  return query;
}
4

1 回答 1

1

这可以通过递归来解决,例如:

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
}

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

于 2013-05-11T01:35:34.497 回答