使用ObservableCollection进行LINQing

时间:2011-01-12 15:00:14

标签: c# linq

我是使用LINQ的新手。我正试图在Silverlight中使用它,因为我正在尝试进行DISTINCT查询。我的Silverlight应用程序ping一个WCF服务,该服务返回一个自定义类型的ObservableCollection。我试图基于我的自定义类型的几个属性到达DISTINCT记录集。我知道第一步是获取我的记录集,所以我正在尝试以下

var filteredItems = (from entity in e.Result
                    select new FilteredItem
                    {
                      Property1 = entity.Property1,
                      Property2 = entity.Property2,
                      Property3 = entity.Property3
                    }).Distinct();

不幸的是,这不起作用。 Intellisense给出了一个错误,上面写着“无法找到源类型MyServiceProxy.MyCustomType的查询模式的实现。选择未找到... ”如何使用带有LINQ的ObservableCollection,或者获取此信息我正在展示的独特集合?

谢谢!

3 个答案:

答案 0 :(得分:7)

ObservableCollection<T>实施IEnumerable<T>,因此如果您是using System.Linq,您应该能够这样做。所有标准LINQ运算符都驻留在该命名空间中。如果这不起作用,那么请确保您引用的是System.Core.dll,因为那是包含相同实现的程序集。

答案 1 :(得分:1)

使用LINQ获取不同的列表就像使用Distinct()方法一样简单。你必须使用分组。看看这个:

LINQ to SQL grouping multiple columns with a distinct row

答案 2 :(得分:0)

您可能需要我的ObservableComputations库。使用该库,您可以像这样进行编码:

var filteredItems = e.Result.Selecting(entity => 
                    new FilteredItem
                    {
                      Property1 = entity.Property1,
                      Property2 = entity.Property2,
                      Property3 = entity.Property3
                    }).Distinct();

在上面的代码中,我假设e.Result为ObservableCollection。 filteredItems为ObservableCollection,反映了上面代码中提到的e.Result集合和属性中的所有更改。确保上面代码中提到的所有属性都通过INotifyPropertyChanged界面通知更改。