1 回答
TA贡献1906条经验 获得超3个赞
不知道GetList()可能的问题是什么,它返回了太多的记录,无法安全地将 ID 注入您的.Any()表达式。EF 将希望将其.Any()转换为如下查询:
WHERE orders.OrderId IN (22, 25, 45, 46, 52, 66, ...)
这通常效率不高,并且您可以传入的 ID 数量有限制。最好将这些条件解析为连接。我不确定这是否会导致堆栈溢出,所以我不相信您拥有的代码示例是完整的,因为如果没有 .ToList() 或类似的表达式,该IQueryable<Order> pos表达式还不会具体化。
我会看看您可以解决请求和订单之间的关系。如果 Request 实体作为对 Order 的引用,那么您可以更改GetList()为返回IQueryable<Request>then 以获取订单:
IQueryable<Request> requests = GetList();
IQueryable<Order> orders = requests.Select(x => x.Order);
从那里您可以 .Select() 您想要的订单的详细信息,并具体化结果数据。
IQueryable<Request> requests = GetList();
List<OrderViewModel> orderVMs = requests.Select(x => new OrderViewModel
{
OrderId = x.Order.OrderId,
RequestId = x.RequestId,
CustomerName = x.Customer.Name,
OrderNumber = x.Order.OrderNumber,
// ...
}).ToList();
如果GetList()可以返回重要的 # 或结果,则使用.Take()and.Skip()而不是.ToList()对结果进行分页。
- 1 回答
- 0 关注
- 189 浏览
添加回答
举报