如何用LINQ筛选含TaskStatus为0的UserTask的UserTaskGroup集合
正确LINQ筛选实现方案
核心思路
筛选出包含至少一个TaskStatus为0的UserTask的UserTaskGroup,核心是用Where过滤分组集合,结合Any方法检查分组内的任务列表是否存在符合条件的元素。
代码实现
// 直接使用枚举值0的写法 var filteredTaskGroups = _retData.Data.Data .Where(group => group.UserTasks.Any(task => task.TaskStatus == 0)) .ToList();
如果TaskStatus枚举有对应命名(比如TaskStatus.NotStarted对应值0),更推荐使用枚举名称,提升代码可读性和可维护性:
// 使用枚举命名的写法 var filteredTaskGroups = _retData.Data.Data .Where(group => group.UserTasks.Any(task => task.TaskStatus == TaskStatus.NotStarted)) .ToList();
常见错误说明
- 误用
All方法:All要求分组内所有任务都满足条件,和需求完全相悖。 - 低效使用
Count:group.UserTasks.Count(task => task.TaskStatus == 0) > 0会遍历整个任务集合,而Any是短路求值,找到第一个符合条件的元素就停止遍历,性能更优。
内容的提问来源于stack exchange,提问作者AbdulAleem
相关产品推荐
相关产品推荐

