将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对象中的实体集合。 您可以立即使用实体集合,但它最初是空的。