A menudo encuentro que linq es problemático cuando se trabaja con objetos de colección personalizados. Ellos son a menudo defened comoLinq con colección base personalizada
La colección base
abstract class BaseCollection<T> : List<T> { ... }
las colecciones se define como
class PruductCollection : BaseCollection<Product> { ... }
¿Hay una mejor manera de agregar los resultados de un expession LINQ a esta colección de AddRange o concat?
var products = from p in HugeProductCollection
where p.Vendor = currentVendor
select p;
PruductCollection objVendorProducts = new PruductCollection();
objVendorProducts.AddRange(products);
Sería bueno si el objeto devuelto de la consulta linq fuera de mi tipo de colección personalizada. Como parece necesitar enumerar la colección dos veces para hacer esto.
EDIT: Después de leer las respuestas, creo que la mejor solución es implementar una extensión ToProduct(). Me pregunto si la covarianza/contravarianza en C# 4.0 ayudará a resolver este tipo de problemas.
"Como parece que necesita para enumerar la colección dos veces para hacer esto" - Dado que la mayoría de las consultas de linq se evalúan de forma diferida, la colección solo se enumerará una vez durante la llamada a AddRange. –
Esto resolvió mi problema, pero no estoy seguro de lo que me falta porque no veo la necesidad de este 'BaseCollection provisional '. ¿Cual es su propósito? –
rtpHarry