2013-05-11 63 views
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,日期= 2012/05/15個I需要使用的recordId = 1
  2. 返回記錄,如果給定:的recordId = 4,日期= 2012年5月25日我需要返回記錄與RecordId = 3
  3. 如果給定:RecordId = 2和日期= 2012/06/10我需要返回記錄與RecordId = 2
  4. 如果給出:RecordId = 2和日期= 2012/01/01我需要返回NULL
  5. 如果考慮到:的recordId = 1,日期= 2012/6月1日,我需要用的recordId返回記錄= 4

我認爲這將是一個複雜的連接和計算,我已經一直在努力掙扎幾個小時而沒有任何成功。
這裏有一個方法的樣機我需要實現:

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

回答

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 
} 

不知道我是否涵蓋了所有你的邏輯,但你應該能夠從上面的代碼工作:)

+0

@ user194076如果我的答案回答你的問題,請將其標記爲:) – JAM 2013-05-13 14:26:51

+0

嘿,謝謝你的回覆。我從你的代碼中得到了這個想法,最終的代碼有點不同,但是非常感謝! – user194076 2013-05-14 01:54:11