我的方法需要返回一个包含与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>
,
beacuse settings.AgentIds
的类型为Collection<Guid>
而labelAgentIds
的类型为IEnumerable<IEnumerable<Guid>>
?
答案 0 :(得分:3)
如果您满足于以显而易见的方式将IEnumerable<IEnumerable<Guid>>
展平为IEnumerable<Guid>
,那么SelectMany
就是您的朋友:
IEnumerable<Guid> labelAgentIds = labelGroups.SelectMany(x => x.AgentIds);
return labelAgentIds.Union(settings.AgentIds);
尽管Select
将输入中的每个元素映射到输出中的另一个元素,SelectMany
将输入中的每个元素映射到中的任意数量元素输出(可能是0,可能是1,可能更多)。
答案 1 :(得分:1)
您可以使用SelectMany
展平收藏集:
IEnumerable<Guid> labelAgentIds = labelGroups.SelectMany(x => x.AgentIds);
答案 2 :(得分:1)
我认为您要展开IEnumerable<Collection<Guid>>
,然后使用SerlectMany
:
var allGuids = labelAgentIds.SelectMany(col => col).Union(settings.AgentIds);
Collection<Guid> result = new Collection<Guid>(allGuids.ToList());