我經常在使用自定義集合對象時發現linq存在問題。 他們往往defened爲Linq與自定義集合對象
基地集合
abstract class BaseCollection<T> : List<T> { ... }
集合定義爲
class PruductCollection : BaseCollection<Product> { ... }
是否有更好的方法來從一個LINQ expession添加結果到這個集合比 的AddRange或concat?
var products = from p in HugeProductCollection
where p.Vendor = currentVendor
select p;
PruductCollection objVendorProducts = new PruductCollection();
objVendorProducts.AddRange(products);
這將是很好,如果從linq查詢返回的對象是我的自定義集合類型。因爲你似乎需要枚舉集合兩次才能做到這一點。
編輯: 在閱讀答案後,我認爲最好的解決方案是實現一個ToProduct()擴展。 不知道c#4.0中的協變/協變會有助於解決這類問題。
。 「你似乎需要枚舉集合兩次做到這一點」 - 由於大多數linq查詢都是懶洋洋地評估的,集合只會在AddRange調用期間枚舉一次。 – 2008-12-19 00:46:34
這解決了我的問題,但我不知道我錯過了什麼,因爲我沒有看到需要這個臨時`BaseCollection`。它的目的是什麼? –
rtpHarry
2011-05-07 21:04:11