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

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


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

ProductContext pcontext = new ProductContext();
ObservableCollection<Prod> prAvs = pcontext.GetProductsQuery();


但是出现错误:

无法隐式转换类型System.ServiceModel.DomainServices.Client.EntityQuery<MyTestApp.Web.Product>
System.Collections.ObjectModel.ObservableCollection<MyTestApp.Prod>

我该如何解决这个问题?

最佳答案

第一个问题:

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

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

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

第二期:

您不能只对集合进行查询。

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

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


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

关于c# - 将WCF RIA服务查询结果加载到ObservableCollection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4163674/

10-12 18:42