Elenco do resultado LINQ para ObservableCollection

O fato de ser um resultado LINQ talvez não seja relevante para a pergunta, mas estou mencionando isso de qualquer forma – já que este é o contexto que resultou nessa questão.

Eu corro uma consulta LINQ. O resultado é um;

IEnumerable 

Eu quero colocar o resultado em um ObservableCollection;

 ObservableCollection 

Como eu faço esse casting? (sem executar o IEnumerable e copiando elementos para o ObservableCollection). Eu percebo LINQ tem algumas funções To .. (), mas não parece me ajudar para este casting ..?

Apenas use:

 ObservableCollection x = new ObservableCollection(enumerable); 

Isso fará a cópia necessária. Não há como observar mudanças na consulta ao vivo – embora a ideia de um ObservableQuery seja interessante (embora desafiadora).

Se você quiser um método de extensão para fazer isso, é simples:

 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); 

Você pode usar um construtor ObservableCollection para isso:

 ObservableCollection obsCol = new ObservableCollection(myIEnumerable); 

IEnumerable é apenas a interface.

Você precisaria copiar o conteúdo do IEnumerable para o ObservableCollection. Você pode fazer isso, passando seu IEnumerable para o construtor do ObersvableCollection quando você cria um novo

Eu escrevi esta biblioteca há alguns anos atrás.

https://github.com/wasabii/OLinq

Não faz exatamente o que você provavelmente quer, faz mais. É um provedor de consulta Linq que analisa a tree de expressão, anexa às collections referenciadas e expõe outra coleção que emite events após alterações.

Está faltando alguns operadores Linq. Mas a base de código não é difícil de extender.