独自クラスを持つリストが2つあり、2つのリストにあるCDプロパティを比較して
CDに一致するNameプロパティを上書きする処理をエレガントに書く方法を教えて下さい。
以下のプログラムではuser3のCDとowner3のCDが初めに一致するためnameプロパティがowner3に書き換えられます。
※owner99も一致しますが、CDはユニークな想定なため初めに一致したCDを返す想定です。
class Person { public int CD; public string Name; } List<Person> userPersonList = new List<Person>(){ new Person(){ CD = 1,Name = "user1"}, new Person(){ CD = 2,Name = "user2"}, new Person(){ CD = 3,Name = "user3"} }; List<Person> ownerPersonList = new List<Person>(){ new Person(){ CD = 4,Name = "owner1"}, new Person(){ CD = 5,Name = "owner2"}, new Person(){ CD = 6,Name = "owner3"}, new Person(){ CD = 3,Name = "owner3"} new Person(){ CD = 3,Name = "owner99"} }; foreach(var userPerson in userPersonList){ foreach(var ownerPerson in ownerPersonList){ if(userPerson.CD == ownerPerson.CD){ userPerson.Name = ownerPerson.Name; break; } } }
以下は試してみた代入部分のLINQ構文です。
foreach(var result in userPersonList.Where(x => ownerPersonList.Select(y => y.CD).Contains(x.CD))){ result.Name = ownerPersonList.Where(x => x.CD == result.CD).Select(x => x.Name).FirstOrDefault(); }
新規に拡張メソッド作成する方法は使わないようにお願いします。
C#のバージョンは6.0です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/31 13:55 編集