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

基于Name和ComputerName从Dictionary中获取唯一Task对象的Linq实现

修正你的Task筛选代码

咱们先聊聊你原来代码的问题:

  • 你用Select之后,得到的是一堆IEnumerable<Task>的集合(每个分组里符合条件的Task列表),而不是你想要的单个Task对象
  • 没有把所有分组里的Task合并成一个统一的序列来筛选,也没处理“唯一匹配”的逻辑

给你调整后的代码,完美实现需求:

// 先定义要匹配的目标值(注意别和查询变量重名)
var targetName = "你要找的Task名称";
var targetComputerName = "你要找的计算机名称";

// 平铺所有分组的Task,筛选后获取唯一匹配项
var matchedTask = Dictio.Values
                         .SelectMany(group => group.Tasks) // 把所有分组里的Task合并成一个序列
                         .SingleOrDefault(task => task.Name == targetName && task.ComputerName == targetComputerName);

代码解释:

  1. Dictio.Values:直接取字典里所有的Grouped对象,不需要关心字典的键
  2. SelectMany:这是关键!它会把每个Grouped里的Tasks集合拆解开,合并成一个连续的Task序列,代替你原来的Select(Select会保留每个独立的集合,没法直接筛选单个Task)
  3. SingleOrDefault:因为你的需求是Name+ComputerName组合唯一对应一个Task,这个方法正好适配:
    • 找到正好一个匹配的Task,就返回它
    • 没找到匹配项,返回null
    • 如果找到多个匹配项(说明数据不符合你的“唯一”约定),会抛出异常,帮你快速发现数据问题

如果你不想因为多个匹配项抛出异常,也可以用FirstOrDefault返回第一个匹配的,但更推荐SingleOrDefault来保证数据符合预期哦。

内容的提问来源于stack exchange,提问作者Hyro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:37:49