2012-02-15 6 views
0

これが可能かどうかは確かではありませんが、誰かが助言するかもしれません。リンクされたレコードをループする

Product_ID | Product_Name | Product_Price | Original_Product_ID 

製品は、新しいレコードがOriginal_Product_IDフィールドの前のencarnationを参照して作成された変更されたときに次のように

は、我々は、我々のシステムで設定したレコードを持っています。

私がしたいことは、Product_ID(現在)を渡し、これが由来する製品を返す場合があります。これは、渡されたものと同じものを返します。それ以外の場合は、番号をループする必要がありますレコードの。

誰かがこれに助言することができます...ここで

+2

これはデータベースまたはデータクラスとコレクションで行われますか? –

+2

これらのレコードはデータベースまたはメモリに保存されていますか?彼らがデータベースにいる場合、どのような種類ですか?問題のドメインに関する詳細情報を提供する必要があります。 – arb

+2

レコードがDBMS内にある場合は、どのDBMSを使用していますか? –

答えて

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の場合、つまりその製品の唯一のエントリである場合です。これに関する提案はありますか? –

+0

OriginalId == nullの場合を追加しました。 –

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); 
} 
関連する問題