可以將下列內容轉換爲更簡單的可讀性更強的linq或lambda表達式嗎?C# - lambda與嵌套循環
Dictionary<int, int> selectedProgramTierCombo = new Dictionary<int,int>();
foreach (int mainTierID in doc.TierID)
{
foreach (PriceProgram priceProgram in doc.CommitmentProgram.PricingPrograms)
{
foreach (ProgramTier progTier in priceProgram.Tiers)
{
if (progTier.TierID == mainTierID)
{
selectedProgramTierCombo.Add(priceProgram.ProgramID, progTier.TierID);
}
}
}
}
本質上doc.TierID是客戶端當前所在的TierID的一個數組(int [])。 doc對象還包含一個CommitmentProgram對象,其中包含一個PriceProgram列表。所以,我試圖做的是獲取每個TierID的PriceProgram.ProgramID。
PriceProgram和TierID之間的關係是每個PriceProgram都有一個層次列表(ProgramTier對象),而ProgramTier oject包含我們已經擁有的對應TierID。
讓我知道如果我的解釋沒有意義,我會盡力詳細說明。
編輯
喬恩, 我得到「priceProgram」這個名字時,我嘗試編譯您建議什麼並不在當前的背景下存在錯誤:
Dictionary<int, int> selectedProgramTierCombo =
(from mainTierID in doc.TierID
from priceProgram in doc.CommitmentProgram.PricingPrograms
**join progTier in priceProgram.Tiers on mainTierID equals progTier.TierID**
select new { priceProgram.ProgramID, progTier.TierID })
.ToDictionary(x => x.ProgramID, x => x.TierID);
使用泛型類型 'System.Collections.Generic.List' 要求 '1' 類型的參數。 –
ja72
2010-12-14 17:54:55
我已經根據Jon的初步答案提供了更新的代碼。 – 2010-12-14 19:11:51
我已經編輯了我的答案,使用另一個'from'子句而不是'join' ...雖然聽起來你根本不需要那麼一點,真的。 – 2010-12-14 19:41:50