2012-02-15 92 views
0

我不確定這是否可能,但也許有人可以提供建議。通過鏈接記錄進行循環

我們已經在我們的系統中設置記錄如下:

Product_ID | Product_Name | Product_Price | Original_Product_ID 

當一個產品被修改,一個新的記錄與在Original_Product_ID領域的參照以前encarnation創建。

我想要做的是傳遞一個Product_ID(當前)並返回這個產品,在某些情況下,這將返回相同的傳遞,在其他情況下,我將需要循環一個數字的記錄。

請能有人建議在此...

+2

這是用數據庫還是數據類和集合完成的? – 2012-02-15 16:37:01

+2

這些記錄是存儲在數據庫還是內存中?如果他們在數據庫中,是什麼類型的?您需要提供有關問題域的更多信息。 – arb 2012-02-15 16:37:23

+2

如果記錄在DBMS中,您使用的是哪個DBMS? – 2012-02-15 16:38:32

回答

2

你需要這樣的東西(非遞歸解決方案)?

Product GetOriginalProductById(int productId) 
{ 
    Product p = GetProductById(productId); 

    while (p.OriginalId != null && p.Id != p.OriginalId) 
    { 
     p = GetProductById(p.OriginalId); 
    } 

    return p; 
} 
+0

這看起來更像我的想法,我會試一試並讓你知道我是怎麼來的。我可以預見的唯一問題是p.OriginalId爲NULL的情況,即該產品的唯一條目。對此有何建議? – 2012-02-16 09:06:44

+0

添加了OriginalId == null的情況。 – 2012-02-16 15:13:55

0

這裏有一個簡單的遞歸方法:

void GetOriginalProducts(Item i, ref List<Item> items) 
{ 
    if(i.ID == i.OriginalID) return; 

    items.Add(i); 
    GetOriginalProducts(items.Single(it => it.OriginalID == i.ID), ref items); 
}