You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:40:24