2010-07-18 20 views
1

Comment puis-je faire cela?Cast IEnumerable <T> à ObservableCollection <T> sans injection de constructeur l'IEnumerable <T>

thats un no go:

ObservableCollection obsCol = new ObservableCollection (myIEnumerable);

scénario

:

var query = from c in customers 
        select new Customer() 
        { 
         Products = from p in products 
            where p.Id = c.Id 
            select p 
}; 

Products est un ObservableCollection donc il ne peut pas prendre le résultat IEnumerable de la sélection ci-dessus ...

Comment fonte?

Répondre

2

Comme ceci:

ObservableCollection obsCol = new ObservableCollection(myIEnumerable.ToList()); 

Notez que l'instance ObservableCollection ne reflète pas les changements à la liste customers.

EDIT: La méthode d'extension Select renvoie une instance d'une classe d'itération générée par le compilateur. Comme cette classe n'hérite pas ObservableCollection, il est impossible de la convertir en une seule.

+0

s'il vous plaît lire sur ma déclaration de non-go, puis modifier votre réponse, merci. – msfanboy

+0

@msfanboy: Il est, par définition, totalement impossible de le faire d'une autre manière. S'il vous plaît lire sur le casting et les classes, puis modifier votre question, merci. – SLaks

+0

La méthode d'extension 'Select' renvoie une instance d'une classe d'itération générée par le compilateur. Puisque cette classe n'hérite pas de 'ObservableCollection', il est impossible de la convertir en une seule. – SLaks