Skip to main content
 首页 » 编程设计

c#之如何将 Union 与不同类型的集合一起使用

2024年01月31日33Terrylee

我的方法需要返回一个包含 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、可能更多)。