LINQ でグループ化したいカスタム オブジェクト (アセット) のコレクションがあります。カスタム オブジェクトには、id、name、cost プロパティなどの標準プロパティがあります。グループ化するときは、グループごとにコストを計算したいので、次のようなちょっとしたトリックを使用しています。
from a in assets
group a by a.AssetId into ga
select new Asset()
{
AssetId = ga.Key,
Cost = ga.Select(gg=>gg.Cost).Sum()
}
わかりました、ここではすべて問題ありません。しかし...注文プロパティも初期化するために、コピーコンストラクターとコスト計算を一緒に使用しています...
from a in assets
group a by a.AssetId into ga
select new Asset(ga.FirstOrDefault())
{
AssetId = ga.Key,
Cost = ga.Select(gg=>gg.Cost).Sum()
}
これで、ID ごとにグループ化されたアセットのコレクションを取得し、すべてのプロパティがグループ内の最初のアセットからコピーされ、グループ化されたコストが計算されます。しかし...これを行うには、この種のグループ化を使用するすべてのオブジェクトに対して、「すべてのプロパティの初期化」を使用するコピーコンストラクターを記述する必要があります。これは、私の場合、20以上のプロパティを持つオブジェクトがあるためオーバーヘッドです。
リンクからクローントリックを使用しようとしました:
linq グループクエリでは成功しませんでした。
私の質問:これを達成するためのより良い/よりエレガントな方法はありますか?
ありがとうございました