以下をより単純で読みやすい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オブジェクトには、PriceProgramのリストを含むCommitmentProgramオブジェクトが含まれています。したがって、私がやろうとしているのは、各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);