如何将foreach循环转换为LINQ语句?赋值操作该如何处理?
把foreach循环转换为LINQ语句的解决方案
你的原foreach循环逻辑是:遍历pList,每当遇到满足item.PDate> Calendar.GetAppDate()且dtoPP.pLastDate < item.pLastDate的元素时,就将dtoPP替换为当前元素。最终dtoPP会是列表中最后一个符合条件的元素(因为后续符合条件的元素会覆盖之前的赋值)。
你尝试的Where语句只是筛选出了所有符合条件的元素,但没有完成最终的赋值逻辑。用LINQ实现等价逻辑可以这样写:
// 筛选符合条件的元素,取最后一个(无符合项时返回默认值,避免报错) dtoPP = pList.Where(item => item.PDate > Calendar.GetAppDate() && dtoPP.pLastDate < item.pLastDate) .LastOrDefault();
补充说明
- 如果能确保列表中一定存在符合条件的元素,可以用
Last()替代LastOrDefault(),但LastOrDefault()更安全,能处理空筛选结果的情况(此时dtoPP会被设为对应类型的默认值,比如引用类型为null)。 - 这个LINQ写法和原foreach逻辑完全等价:两者都是按列表顺序遍历,最终保留最后一个满足条件的元素。
内容的提问来源于stack exchange,提问作者Zeynep Aydemir
相关产品推荐
相关产品推荐

