我有我想用LINQ進行分組的自定義對象(資產)的集合。自定義對象具有標準屬性,如id,名稱和成本屬性。 分組時我要計算每個組的成本,所以我用小動作像這樣:在linq分組上覆制對象 - 複製構造函數替換
from a in assets
group a by a.AssetId into ga
select new Asset()
{
AssetId = ga.Key,
Cost = ga.Select(gg=>gg.Cost).Sum()
}
好了,一切都在這裏很好。但是......爲了初始化爲了性能,以及,我使用拷貝構造器和成本計算在一起......
所以現在,我通過ID獲得分組資產的集合,所有屬性從複製計算分組成本的組中的第一項資產。但是...爲了做到這一點,我需要爲使用這種分組的每個對象編寫一個帶有「全部屬性初始化」的複製構造函數,在我的情況下這是開銷,因爲有20+屬性的對象。
我試着使用克隆伎倆從鏈接:
在LINQ組查詢,但沒有成功。
我的問題:是否有更好/更優雅的方式來實現這一目標?
謝謝
糟糕!我注意到你想使用對象初始化器 - 不知道他們是否可以在使用構造函數的資產實例上工作。 – VinayC 2010-08-11 10:12:15
我能想到的唯一方法是添加使用MemberwiseClone()的拷貝構造函數 - 這將至少減少編寫拷貝構造函數的時間。 另一種方式是寫一個靜態方法如 - 靜態ŤCloneAndUpdate(T噸,動作更新)其中,T:類 { Ť克隆= ...;/*使用反射/序列化來創建克隆*/ 更新程序(克隆); return clone; }然後將其用作---- select Utility.CloneAndUpdate(ga.FirstOrDefault(),a => {AssetId = ga.Key, Cost = ga.Select(gg => gg.Cost).Sum( ) }) –
VinayC
2010-08-11 10:35:43
是的,多數民衆贊成我的問題..謝謝反正,很好的答案 – Marko 2010-08-11 10:36:07