是否可以将以下内容转换为更易读的linq或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对象包含我们已经拥有的相应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);
最佳答案
绝对,这很容易-但是我必须更改您的selectedProgramTierCombo
变量的类型,否则它将无法编译:
编辑:糟糕,鉴于这些层取决于priceProgram,您需要另一个嵌套的from
子句,我认为:
Dictionary<int, int> selectedProgramTierCombo =
(from mainTierID in doc.TierID
from priceProgram in doc.CommitmentProgram.PricingPrograms
from progTier in priceProgram.Tiers
where mainTierID == progTier.TierID
select new { priceProgram.ProgramID, progTier.TierID })
.ToDictionary(x => x.ProgramID, x => x.TierID);
至少,这就是我想要的。如果您可以代替
List<int, int>
来澄清自己的真正需求(这是无效的),我们可以提供进一步的帮助。老实说,我不清楚您为什么要使用
progTier
-您知道progTier.TierID
与mainTierID
相同,并且您没有在使用它...关于c# - C#-Lambda与嵌套循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4442295/