我的方法需要返回一个包含 settings.AgentIds 的集合和 agent ids对应于 settings.LabelIds .所以我决定使用 Union
IEnumerable<IAgentsGroup> labelGroups = _agentsGroups.Values.Where(x => settings.LabelIds.Contains(x.Id));
IEnumerable<IEnumerable<Guid>> labelAgentIds = labelGroups.Select(x => x.AgentIds);
return labelAgentIds.Union(settings.AgentIds);
但我现在不知道如何将它组合成一个 Collection<Guid> ,
因为 settings.AgentIds类型为 Collection<Guid>和 labelAgentIds有IEnumerable<IEnumerable<Guid>>类型?
请您参考如下方法:
如果您满足于将 IEnumerable<IEnumerable<Guid>> 压平进入 IEnumerable<Guid>以明显的方式,然后 SelectMany 是你的 friend :
IEnumerable<Guid> labelAgentIds = labelGroups.SelectMany(x => x.AgentIds);
return labelAgentIds.Union(settings.AgentIds);
而 Select将输入中的每个单个元素映射到输出中的另一个单个元素,SelectMany将输入中的每个元素映射到输出中的任意数量元素(可能是 0、可能是 1、可能更多)。
