当我们使用 MVVM 时,我们在视图模型中使用了相当多的 ObservableCollections,为了节省一些输入,我认为拥有一个将 IEnumerable 直接转换为 ObservableCollection 的扩展方法会很有用,而不必创建一个新的 ObservableCollection每一次。
因此,而不是打字...
ObservableCollection fred = new ObservableCollection(myCollection);
...我们可以输入...
ObservableCollection fred = myCollection.ToObservableCollection();
显然,在上面的人为示例中,这样做几乎没有什么好处,但在更大的 Linq 查询中,这可以清理代码。
无论如何,我写了一个像这样的简单扩展方法......
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> collection) {
if (collection != null) {
return new ObservableCollection<T>(collection);
}
throw new ArgumentNullException("collection");
}
但是,当我尝试使用它时,我得到了一个例外......
LINQ to Entities 无法识别方法 'System.Collections.ObjectModel.ObservableCollection`1[VisionRT.CRM.Entities.SiteOverview] ToObservableCollection[SiteOverview](System.Collections.Generic.IEnumerable`1[VisionRT.CRM.Entities.SiteOverview] )' 方法,并且该方法不能翻译成商店表达式。
如果不是因为 ToList() 扩展方法做了完全相同的事情,但可以工作,我会理解这一点。
任何人有任何想法为什么我的方法失败,以及如何解决它?谢谢。