У меня есть такой метод, который работает, как и ожидалось.
[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; }
}
Исключение:
Невозможно сериализовать член Proj.CustomerModel.Logs типа System.Collections.Generic.IEnumerable`1 [[Proj.OrderModel,Proj, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = ноль]], потому что это интерфейс.
Мои цели:
- Я хочубыть в состоянии предоставить интерфейс IQueryable.
- Я хочу вернуть вложенные данные.
- Я хочу использовать свои собственные модели, а не объекты ado.net
- Я хочупоразить базу данных как можно меньшим количеством запросов (один будет лучшим).