将WCF RIA服务查询结果加载到ObservableCollection

在我的Silverlight应用程序中,在创建ADO.NET实体数据模型和WCF RIA服务域服务类之后,在相应的ProductService类中,我有一个查询操作,它将一组Product实体返回给客户端,如下所示:

public IQueryable GetProducts() { return this.ObjectContext.Products; } 

现在我试图在客户端Silverlight应用程序中读取它并将结果加载到ObservableCollection:

 ProductContext pcontext = new ProductContext(); ObservableCollection prAvs = pcontext.GetProductsQuery(); 

但是得到一个错误:

无法将System.ServiceModel.DomainServices.Client.EntityQuery类型隐式转换为System.Collections.ObjectModel.ObservableCollection

我该如何解决这个问题?

第一个问题:

您应该使用RIA服务为您生成的客户端Products类,而不是您自己定义的另一个类。

例如,您应该拥有MyTestApp.Web.Product的集合,而不是MyTestApp.Prod对象的集合。

您将在客户端项目的隐藏Generated_Code文件夹中找到生成的域上下文。 其中包含一个MyTestApp.Web.g.cs文件,其中包含客户端上下文和任何数据对象(如MyTestApp.Web.Product)。

第二期:

您不能只是将查询转换为集合。

您需要使用查询来加载实体更改集。

 var loadOperation = pcontext.Load(pcontext.GetProductsQuery()); 

结果(加载完成时)是返回的loadOperation对象中的实体集合。 您可以立即使用实体集合,但它最初是空的。