簡體   English   中英

將 LINQ 結果轉換為 ObservableCollection

[英]Cast LINQ result to ObservableCollection

它是 LINQ 結果的事實可能與該問題無關,但無論如何我都會提到它 - 因為這是導致這個問題的上下文。

我運行一個 LINQ 查詢。 結果是;

IEnumerable<MyClass> 

我想把結果放到一個 ObservableCollection 中;

ObservableCollection<MyClass> 

我怎么做這個演員? (無需運行 IEnumerable 並將元素復制到 ObservableCollection)。 我注意到 LINQ 有一些 To..() 函數,但它似乎對這個演員沒有幫助..?

只需使用:

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 運算符。 但是代碼庫並不難擴展。

你可能需要我的ObservableComputations庫。 這是用於計算 INotifyPropertyChanged 和 INotifyCollectionChanged (ObservableCollection) 對象的 .NET API。 計算結果是 INotifyPropertyChanged 和 INotifyCollectionChanged (ObservableCollection) 對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM