Emitir resultado LINQ a ObservableCollection

El hecho de que se trate de un resultado LINQ podría no ser relevante para la pregunta, pero lo estoy mencionando de todos modos, ya que este es el contexto que ha resultado en esta pregunta.

Ejecuto una consulta LINQ. El resultado es un;

IEnumerable 

Quiero poner el resultado en una ObservableCollection;

 ObservableCollection 

¿Cómo hago este elenco? (sin ejecutar los elementos IEnumerable y copiar a ObservableCollection). Noté que LINQ tiene algunas funciones para … (), pero parece que no me ayuda para este elenco …

Solo usa:

 ObservableCollection x = new ObservableCollection(enumerable); 

Eso hará la copia requerida. No hay forma de observar cambios en la consulta en vivo, aunque la idea de un ObservableQuery es interesante (aunque desafiante).

Si quieres un método de extensión para hacer esto, es simple:

 public static ObservableCollection ToObservableCollection (this IEnumerable source) { if (source == null) { throw new ArgumentNullException("source"); } return new ObservableCollection(source); } 
 var linqResults = foos.Where(f => f.Name == "Widget"); var observable = new ObservableCollection(linqResults); 

Puede usar un constructor de ObservableCollection para esto:

 ObservableCollection obsCol = new ObservableCollection(myIEnumerable); 

IEnumerable es solo la interfaz.

Debería copiar el contenido de IEnumerable en ObservableCollection. Puedes hacer esto pasando tu IEnumerable al constructor de ObersvableCollection cuando crees uno nuevo

Escribí esta biblioteca hace unos años.

https://github.com/wasabii/OLinq

No hace exactamente lo que probablemente quieras, hace más. Es un proveedor de consultas de Linq que analiza el árbol de expresiones, se adjunta a las colecciones a las que se hace referencia y expone otra colección que emite eventos cuando se producen cambios.

Faltan algunos operadores Linq. Pero la base de código no es difícil de extender.