如何将检查租赁标识的foreach循环改写为LINQ查询?
将foreach循环改写为LINQ查询实现相同逻辑
原代码的核心逻辑是遍历订单集合,只要发现任意一条订单的租赁标识转成ListItem后包含"Y",就弹出警告、禁用按钮并终止流程。用LINQ的Any方法可以完美实现相同逻辑,代码更简洁:
List showPopup = bizDraftOrder.GetDraftOrders(LocalUser.employee_id); // 用LINQ判断是否存在符合条件的订单 bool hasLeaseExceed = showPopup.Any(draftOrder => new ListItem(draftOrder.HALO_LEASE_FLAG).ToString().Contains("Y")); if (hasLeaseExceed) { RadWindowManager1.RadAlert("You have exceeded for maximum vehicle count for lease.", 400, 150, "Alert", null, null); rbtSubmit.Enabled = false; rbtReset.Enabled = false; return; }
说明:
Any方法会遍历集合,找到第一个符合条件的元素就立即停止遍历,和原循环中找到匹配项后return的逻辑完全一致,不会额外遍历多余元素,性能和原代码持平。- 保持了原逻辑中
ListItem转换后再判断的步骤,确保行为和原代码完全一致。如果HALO_LEASE_FLAG本身就是字符串,且ListItem.ToString()的结果等同于该字符串,也可以直接判断draftOrder.HALO_LEASE_FLAG.Contains("Y"),这样能减少不必要的对象创建,提升一点效率。
内容的提问来源于stack exchange,提问作者Sravya Damodar
相关产品推荐
相关产品推荐

