我的方法需要返回一个包含 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、可能更多)。
关于c# - 如何将 Union 与不同类型的集合一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32738818/