我正在将实体对象转换为我自己的模型(CustomerModel和OrderModel)。
我目前有一个IQueryable方法可以返回我的客户:
IQueryable<CustomerModel> GetCustomers()
{
return from c in entities.Customers
select new CustomerModel {
CustomerId = c.CustomerId,
CustomerName = c.CustomerName
// Orders = ??
};
}
在我的CustomerModel中,您可以看到我有一个Orders数组。
class CustomerModel {
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public OrderModel[] Orders { get; set; }
}
class OrderModel {
public int OrderId { get; set; }
public int CustomerId { get; set; }
public string OrderDetails { get; set; }
}
当Orders类型为Array时,我似乎无法弄清楚如何在Customer对象中设置Orders。
当我将CustomerModel的Orders更改为IEnumerable而不是数组时,我能够做到这一点,你不能将.ToArray()与LINQ to Entities一起使用,所以我被卡住了。
所以我的问题是:这是否可以使用Array for Orders?
问题解答:
此外,您无法使用ToArray()作为订单,会抛出此错误:
System.NotSupportedException: LINQ to Entities does not recognize the method 'Proj.Models.Orders[] ToArray[Orders](System.Collections.Generic.IEnumerable`1[Proj.Models.Orders])' method, and this method cannot be translated into a store expression.
答案 0 :(得分:4)
如果Orders
可以从Customers
访问,您可以尝试:
IQueryable<CustomerModel> GetCustomers()
{
return from c in entities.Customers
select new CustomerModel {
CustomerId = c.CustomerId,
CustomerName = c.CustomerName
Orders = from o in c.Orders
select new Order{
OrderId = o.OrderId,
...
}
};
}
这需要您将Customer.Orders
更改为IEnumerable<Order>
。这是在一个请求中将对象图加载到数据库的唯一方法。
答案 1 :(得分:2)
当我们的数据访问方法返回业务对象(模型)时,这种做法并不是很好。您可以通过以下方式编辑查询:
IQueryable<Customer> GetCustomers()
{
return entities.Customers;
}
IQueryable<Order> GetOrders()
{
return entities.Orders;
}
IEnumerable<CustomerModel> GetCustomerModels()
{
var result = from c in GetCustomers()
let orderModels = from o in GetOrders()
where o.CustomerId == c.CustomerId
select new OrderModel
{....}
select new CustomerModel
{
CustomerId = c.CustomerId,
CustomerName = c.CustomerName,
Orders = orderModels.ToArray()
};
return result;
}
如果此解决方案对您没用,请描述您的“实体”