首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WCF数据服务+ LINQ投影到自定义类型

WCF数据服务+ LINQ投影到自定义类型
EN

Stack Overflow用户
提问于 2011-05-21 04:57:32
回答 2查看 803关注 0票数 1

我正在尝试将显示的各个部分及其位置列表从WCF数据服务投影到自定义类型中。这在Silverlight客户端的WCF数据服务中是可行的吗?有一些帮助here,但它没有显示返回列表和简单字符串。

目前我得到了"NotSupportedException:不支持使用表达式d.Base.Title构造或初始化UserQuery+Info类型的实例“。如果你能告诉我如何在这个语法中展开位置(我知道Displays.Expand(" Locations ")),或者我是否需要它,那就太好了。

LINQPad代码段

代码语言:javascript
运行
复制
var displays = from d in Displays.Where(d => d.Id == 3136)
select new Info
{
Name = d.Base.Title,

};


displays.Dump();

}
public class Info
{
private string name;
public string Name
{
  get
    {
      return this.name;
    }

    set
    {
      this.name = value;
    }
}
public IEnumerable<Location> locations;
public IEnumerable<Location> Locations
{
get{ return this.locations;}
set{ this.locations = value;}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-21 05:12:51

问题是,您实际上是在请求您的WCF服务器构造一些它不知道的类型。由于它无法执行此操作,因此您必须在您的计算机上自己执行此操作:

代码语言:javascript
运行
复制
Displays
  .Where(d => d.Id == 3136)
  .AsEnumerable()
  .Select(d => new Info { Name = d.Base.Title })

这将在服务器上运行Where(),但在您的计算机上运行Select()

票数 1
EN

Stack Overflow用户

发布于 2011-05-21 18:16:21

正如svick所指出的,您不能向服务器请求它不能理解的类型(至少不能使用OData )。但是您仍然可以只请求您想要的属性,而不能要求更多。

由于我没有您的服务,下面的示例使用odata.org上的演示服务:

代码语言:javascript
运行
复制
    DemoService ctx = new DemoService(new Uri("http://services.odata.org/OData/OData.svc/"));

    var q =
        ctx.Products
            .Where(p => p.ID == 1)
            .Select(p =>
                new Product
                {
                    Category = new Category
                    {
                        Name = p.Category.Name
                    }
                });

    var r =
        q.AsEnumerable()
            .Select(p =>
                new
                {
                    CategoryName = p.Category.Name
                });

第一个查询"q“将在服务器上运行(除了客户端对象的创建),它将只获得类别的名称(以及有关所有实体的元数据)。它会被转换成像/Products(1)?$expand=Category&$select=Category/Name.这样的网址

第二个查询从AsEnumerable开始,它有效地执行第一个查询,然后它只执行一个简单的转换为匿名类型。这完全是在客户端上完成的(没有服务器交互)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6077517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档