将LINQ结果转换为ObservableCollection

sti*_*k81 60 c# linq casting

它是LINQ结果的事实可能与问题无关,但无论如何我都提到它 - 因为这是导致这个问题的背景.

我运行LINQ查询.结果是;

IEnumerable<MyClass> 
Run Code Online (Sandbox Code Playgroud)

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

ObservableCollection<MyClass> 
Run Code Online (Sandbox Code Playgroud)

我怎么做这个演员?(没有运行IEnumerable并将元素复制到ObservableCollection).我注意到LINQ有一些To ..()函数,但它似乎没有帮助我这个演员..?

Jon*_*eet 97

只需使用:

ObservableCollection<Foo> x = new ObservableCollection<Foo>(enumerable);
Run Code Online (Sandbox Code Playgroud)

这将进行所需的复制.没有办法观察实时查询的变化 - 虽然a的想法ObservableQuery<T>是一个有趣的(虽然具有挑战性).

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

public static ObservableCollection<T> ToObservableCollection<T>
    (this IEnumerable<T> source)
{
    if (source == null)
    {
        throw new ArgumentNullException("source");
    }
    return new ObservableCollection<T>(source);
}
Run Code Online (Sandbox Code Playgroud)

  • 现在有人如何在Silverlight 3.0中实现这一点,其中只有默认的新ObservableCollection <Foo>()构造函数可用? (4认同)

Dav*_*kle 13

var linqResults = foos.Where(f => f.Name == "Widget");

var observable = new ObservableCollection<Foo>(linqResults);
Run Code Online (Sandbox Code Playgroud)


bru*_*nde 10

您可以使用ObservableCollection 构造函数:

ObservableCollection<MyClass> obsCol = 
        new ObservableCollection<MyClass>(myIEnumerable);
Run Code Online (Sandbox Code Playgroud)