第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 LINQ 時出現(xiàn) StackOverFlow 未處理錯誤”

使用 LINQ 時出現(xiàn) StackOverFlow 未處理錯誤”

C#
阿波羅的戰(zhàn)車 2021-11-28 20:10:01
我有以下代碼,它停止執(zhí)行“StackOverFlow 未處理的錯誤”。var Requests= GetList();// return List of Request objectsIQueryable<Order> pos= Enumerable.Empty<Order>().AsQueryable();if (Requests != null) {   if (Requests.Count > 0)      {       var GeneralReq = Requests.Select(loc => loc.Id).ToList();pos = db.Order.Where(loc => loc.Deleted == false && GeneralReq.Any(a => a == loc.Id));//HERE, stop executing with StackOverFlow Error.      } }問題就在這里:pos = db.Order.Where(loc => loc.Deleted == false && GeneralReq.Any(a => a == loc.Id));
查看完整描述

1 回答

?
一只名叫tom的貓

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é)果進行分頁。


查看完整回答
反對 回復 2021-11-28
  • 1 回答
  • 0 關注
  • 216 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號