Приведите результат LINQ к ObservableCollection



тот факт, что это результат LINQ, возможно, не имеет отношения к вопросу, но я все равно упоминаю об этом - поскольку это контекст, который привел к этому вопросу.



Я запускаю запрос LINQ. В результате получается;



IEnumerable<MyClass> 


Я хочу поместить результат в ObservableCollection;



ObservableCollection<MyClass> 


Как мне сделать этот бросок? (без выполнения IEnumerable и копирования элементов в ObservableCollection). Я заметил, что у LINQ есть несколько К..() функции, но это, кажется, не помогает мне для этого броска..?

675   5  

5 ответов:

просто использовать:

ObservableCollection<Foo> x = new ObservableCollection<Foo>(enumerable);

это сделает необходимое копирование. Нет никакого способа наблюдать изменения в живом запросе - хотя идея ObservableQuery<T> является интересным (хотя и сложным).

Если вы хотите, чтобы метод расширения для этого, все просто:

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

var observable = new ObservableCollection<Foo>(linqResults);

можно использовать ObservableCollectionконструктор для этого:

ObservableCollection<MyClass> obsCol = 
        new ObservableCollection<MyClass>(myIEnumerable);

IEnumerable это только интерфейс.

вам нужно будет скопировать содержимое из IEnumerable в ObservableCollection. Вы можете сделать это, передав свой IEnumerable в конструктор ObersvableCollection при создании нового

Я написал эту библиотеку несколько лет назад.

https://github.com/wasabii/OLinq

Он не делает именно то, что вы, вероятно, хотите, он делает больше. Это поставщик запросов Linq, который анализирует дерево выражений, присоединяется к ссылочным коллекциям и предоставляет другую коллекцию, которая выдает события при изменениях.

не хватает нескольких операторов Linq. Но базу кода не трудно расширить.

Comments

    Ничего не найдено.