あるタイプのオブジェクトのコレクションを別のタイプに変換したいと考えています。これは foreach で簡単にできますが、Linq の集計関数を使ってそれを行う方法を見つけたいと思います。
問題は、すべての Aggregate の例で、「+」演算子をサポートする line string または int 型が使用されていることです。アキュムレータの型をリストにしたいのですが、これは「+」セマンティクスをサポートしていません。
簡単な例を次に示します。
public class DestinationType
{
public DestinationType(int A, int B, int C) { ... }
}
var set = from item in context.Items
select new { item.A, item.B, item.C };
var newSet = set.Aggregate( new List<DestinationType>(),
(list, item) => list.Add(new DestinationType(item.A, item.B, item.C)) );
問題は、List<>.Add が void を返すことです。Aggregate の 2 番目のパラメーターの戻り値の型は、リストである必要があります。
「+」型セマンティクスをサポートするリスト型があれば、2 番目のパラメーターを作成できます。
list + item
ただし、この種のことをサポートするコレクション型は見つかりません。
これはLinqで簡単にできるようです。方法はありますか?また、完全に簡単な方法を見逃している場合は、それについても知りたいです。ありがとう!