我是使用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,或者获取此信息我正在展示的独特集合?
谢谢!
答案 0 :(得分:7)
ObservableCollection<T>
实施IEnumerable<T>
,因此如果您是using System.Linq
,您应该能够这样做。所有标准LINQ运算符都驻留在该命名空间中。如果这不起作用,那么请确保您引用的是System.Core.dll,因为那是包含相同实现的程序集。
答案 1 :(得分:1)
使用LINQ获取不同的列表就像使用Distinct()方法一样简单。你必须使用分组。看看这个:
答案 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界面通知更改。