LINQ查询异常:获取全部任务而非指定文件夹匹配项求助
问题分析与解决
你的问题出在变量名冲突导致LINQ筛选条件完全失效:
在有问题的代码行里,LINQ的Where方法参数名和外层循环的task变量重名了:
allTasks.Where(task => task.folder.Equals(task.folder)).ToList()
这里的两个task.folder实际指向的是Where方法内部参数task的属性,相当于让任务的文件夹和自己比较,永远返回true,所以会把所有任务都加载进去。
直接修正方案
把LINQ里的参数名改成和外层循环变量不同的名称(比如t),就能正确引用当前循环的文件夹名称来筛选匹配的任务:
var newFolder = new TaskFolderView(this, task.folder, allTasks.Where(t => t.folder.Equals(task.folder)).ToList());
更高效的优化写法
原代码通过遍历所有任务维护folders列表去重的方式效率偏低,可以直接用LINQ的GroupBy按文件夹分组,一次性完成去重和筛选,逻辑更简洁:
private async void AddTasks() { List<TaskStruct> allTasks = await taskApi.GetTasks(); flowLayoutPanel2.Controls.Clear(); // 按文件夹自动分组,天然去重 var folderGroups = allTasks.GroupBy(t => t.folder); foreach (var group in folderGroups) { var newFolder = new TaskFolderView(this, group.Key, group.ToList()); flowLayoutPanel2.Controls.Add(newFolder); } }
这种写法里,group.Key就是当前文件夹的名称,group.ToList()直接就是该文件夹下的所有任务,不需要手动维护去重列表。
内容的提问来源于stack exchange,提问作者xVice1337
相关产品推荐
相关产品推荐

