1 回答

TA貢獻1906條經(jīng)驗 獲得超3個贊
不知道GetList()可能的問題是什么,它返回了太多的記錄,無法安全地將 ID 注入您的.Any()表達式。EF 將希望將其.Any()轉(zhuǎn)換為如下查詢:
WHERE orders.OrderId IN (22, 25, 45, 46, 52, 66, ...)
這通常效率不高,并且您可以傳入的 ID 數(shù)量有限制。最好將這些條件解析為連接。我不確定這是否會導致堆棧溢出,所以我不相信您擁有的代碼示例是完整的,因為如果沒有 .ToList() 或類似的表達式,該IQueryable<Order> pos表達式還不會具體化。
我會看看您可以解決請求和訂單之間的關系。如果 Request 實體作為對 Order 的引用,那么您可以更改GetList()為返回IQueryable<Request>then 以獲取訂單:
IQueryable<Request> requests = GetList();
IQueryable<Order> orders = requests.Select(x => x.Order);
從那里您可以 .Select() 您想要的訂單的詳細信息,并具體化結(jié)果數(shù)據(jù)。
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()可以返回重要的 # 或結(jié)果,則使用.Take()and.Skip()而不是.ToList()對結(jié)果進行分頁。
- 1 回答
- 0 關注
- 216 瀏覽
添加回答
舉報