将LINQ结果转换为ObservableCollection

事实上,这是一个LINQ的结果可能不是相关的问题,但无论如何我提到它 – 因为这是导致这个问题的上下文。

我运行一个LINQ查询。 结果是一个;

IEnumerable<MyClass> 

我想把结果放到一个ObservableCollection中;

 ObservableCollection<MyClass> 

我该如何做这个演员? (无需运行IEnumerable并将元素复制到ObservableCollection)。 我注意到LINQ有几个To ..()函数,但它似乎没有帮助我这个演员..?

只要使用:

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

这将做所需的复制。 虽然ObservableQuery<T>是一个有趣的(尽pipe是具有挑战性的),但是没有办法观察对实时查询的更改。

如果你想要一个扩展方法来做到这一点,很简单:

 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传递给ObersibleCollection的构造函数来创build一个新的

几年前我写了这个图书馆。

https://github.com/wasabii/OLinq

这不是你想要的,而是做得更多。 它是一个Linq查询提供程序,它分析expression式树,附加到引用的集合,并公开另一个集合,这些集合在发生更改时发出事件。

它缺less一些Linq运营商。 但是代码库不难扩展。