2011-07-20 8 views
2

オブジェクトイニシャライザ構文でオブジェクトを構築する場合、割り当てステートメントの1つでリストを反復処理し、そのプロパティに反復の出力を割り当てる方法はありますか?オブジェクトイニシャライザでリストを反復する

たとえば、私はPersonモデルをPersonビューモデルに変換しています(主にPersonモデルに遅延ロードされたプロパティがあり、再帰的な可能性がありますが、ビューはWeb上で切断されています。シリアル化される単一のPersonインスタンスが必要です)。私はまたenumerables上の.ForEach()のような便利なもののnVentive Umbrella拡張を使用しています。私の個人モデルから人物ビューモデルの私のリストを出力するので、私はこのようにそれらを変換します

people.ForEach(p => 
    returnPeople.Add(
    new Person{ 
     FirstName = p.FirstName, 
     ID = p.ID, 
     LastName = p.LastName, 
     MiddleName = p.MiddleName, 
     NamePrefix = p.NamePrefix, 
     NameSuffix = p.NameSuffix, 
     ParentsID = p.Parents == null ? 0 : p.Parents.ID, 
     PartnershipIDs = new List<int>(), 
     Sex = p.Sex.ToString() 
    } 
) 
); 

私は人のモデル(people)のコレクションを反復処理し、パーソン・ビュー・モデルのコレクションを移入しています(returnPeople )。すべて正常に動作しますが、同じ文にそのPartnershipIDsプロパティを設定したいと考えています。

//.... 
PartnershipIDs = p.Partnerships.ForEach(par => yield return par.ID) 
//.... 

これは機能しません。コンパイラは構文が気に入らない。しかし、この設定でその機能を実現する方法はありますか?または、最初に1つのフィールド以外のすべてを含むPersonビューモデルを初期化してから、次の行に残りのフィールドを設定する必要がありますか?

+1

古き良き適切 'foreach'ループが悪いのか? –

答えて

4

あなたは、単純な投影が必要です

PartnershipIDs = p.Partnerships.Select(par => par.ID).ToList() 
+0

シンプルな(と私は本当にそれを考えていたはずです...)、ありがとう! – David

1

おそらく、代わりのForEachをやって、あなたはSelectを行います

PartnershipIDs = p.Partnerships.Select(par => par.ID).ToList();