【发布时间】:2023-03-28 17:25:01
【问题描述】:
我有一个像这样的方法可以按预期工作。
[WebGet]
public IQueryable<BuildJobModel> GetCustomers()
{
var context = new MyDataContext(); // ADO.NET Entity Data Model
var query = from c in context.Customers
select new CustomerModel {
Id = c.Id,
Name = c.Name
};
return query;
}
但是当我尝试像这样创建更复杂的查询时,它不起作用。
[WebGet]
public IQueryable<BuildJobModel> GetCustomers()
{
var context = new MyDataContext(); // ADO.NET Entity Data Model
var query = from c in context.Customers
select new CustomerModel {
CustomerId = c.CustomerId,
Name = c.Name,
Orders = from o in c.Orders
select new OrderModel {
OrderId = o.OrderId,
Details = o.Details
}
};
return query;
}
模型如下所示:
public class CustomerModel
{
public int CustomerId { get; set; }
public string Name { get; set; }
public IEnumerable<OrderModel> Orders { get; set; }
}
public class OrderModel
{
public int OrderId { get; set; }
public string Details { get; set; }
}
例外:
无法序列化 System.Collections.Generic.IEnumerable`1[[Proj.OrderModel, Proj, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 类型的成员 Proj.CustomerModel.Logs,因为它是一个接口.
我的目标:
- 我希望能够公开 IQueryable 接口。
- 我想返回嵌套数据。
- 我想使用自己的模型,而不是 ado.net 实体
- 我想用尽可能少的查询访问数据库(最好有一个)。
【问题讨论】:
标签: wcf linq wcf-web-api