我有這樣的方法,按預期工作。嵌套的LINQ IQueryable和WCF WebApi
[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.CustomerModel.Logs。 OrderModel,Proj,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]],因爲它是一個接口。
我的目標:
- 我希望能夠揭露一個IQueryable接口。
- 我想返回嵌套的數據。
- 我想使用我自己的模型,而不是ado.net實體
- 我想用盡可能少的查詢命中數據庫(最好是一個)。
這個問題很糟糕,雖然web服務內部使用,只能由一個項目使用,所以我們走了那條路線。 – joelnet 2012-02-01 01:49:42
返回結果列表(而不是IQueryable)不會阻止您嵌套數據。你所做的只是預先填充你想要返回的任何嵌套數據。 – 2012-02-01 01:51:42
IQueryable在WCF中不會混淆。它不像普通的C#代碼 – 2012-02-01 01:58:33