可以将下列内容转换为更简单的可读性更强的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