次のコードは、ループしてresultSet
リスト a を作成しSomeType
ます。それresultSet
自体は 2 つのプロパティを持つ匿名型です
var resultSet = SomeCollection.Select(x => new {
FirstProp = x,
SomeMembers = SomeLinkCollection.Where(l => l.SomeId == x.SomeId)
.Select(l => AnotherCollection[l.Id])
});
var result = new List<SomeType>();
foreach (var currentGroup in resultSet) {
result.Add(new SomeType {
Prop1 = currentGroup.Item.Id,
Prop2 = currentGroup.Item.Name,
Prop3 = currentGroup.SomeMembers.OrderBy(x => x.Name)
});
}
新しいインスタンスの設定を削除するためSometype
に、動的型を使用してマッパー クラス/インターフェイスを作成し、責任を分割して依存関係注入を使用しました。
public class SomeMapper : ISomeMapper {
public List<SomeType> Map(dynamic resultSet) {
return resultSet.Select(new SomeType {
Prop1 = currentGroup.Item.Id,
Prop2 = currentGroup.Item.Name,
Prop3 = ((IEnumerable<AnotherType>)resultSet.SomeMembers)
.OrderBy(x => x.Name)
});
}
}
したがって、上記のコードは次のようになります。
return resultSet.Select(SomeMapper.Map);
エラー
タイプ 'System.Collections.Generic.IEnumerable>' を 'System.Collections.Generic.List' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)
明示的なキャストを使用していくつかのトリックを試しましSomeType
たが、実行時に失敗します
return (List<SomeType>)groupSet.Select(statusGroupMapper.Map);
タイプ'WhereSelectListIterator2[AnotherType,System.Collections.Generic.List
1[SomeType]]' のオブジェクトをタイプ 'System.Collections.Generic.List`1[SomeType]'にキャストできません。