C# 如何对不同类型的集合使用Union?
我的方法需要返回一个集合,该集合包含与C# 如何对不同类型的集合使用Union?,c#,linq,C#,Linq,我的方法需要返回一个集合,该集合包含与settings.LabelIds相对应的settings.agentID和agent id。所以我决定使用Union IEnumerable<IAgentsGroup> labelGroups = _agentsGroups.Values.Where(x => settings.LabelIds.Contains(x.Id)); IEnumerable<IEnumerable<Guid>> labelAgentI
settings.LabelIds
相对应的settings.agentID
和agent id
。所以我决定使用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);
IEnumerable labelGroups=\u agentsGroups.Values.Where(x=>settings.LabelIds.Contains(x.Id));
IEnumerable labelAgentIds=labelGroups.Select(x=>x.AgentIds);
返回labelAgentIds.Union(settings.AgentIds);
但是我现在不知道如何将它合并到一个集合中
因为
settings.AgentIds
具有类型Collection
和labelAgentIds
具有IEnumerable
type?您可以使用SelectMany
展平集合:
IEnumerable<Guid> labelAgentIds = labelGroups.SelectMany(x => x.AgentIds);
IEnumerable labelAgentIds=labelGroups.SelectMany(x=>x.AgentIds);
您可以使用SelectMany
展平收藏:
IEnumerable<Guid> labelAgentIds = labelGroups.SelectMany(x => x.AgentIds);
IEnumerable labelAgentIds=labelGroups.SelectMany(x=>x.AgentIds);
如果你满足于以显而易见的方式将IEnumerable
扁平化为IEnumerable
,那么你的朋友是:
IEnumerable<Guid> labelAgentIds = labelGroups.SelectMany(x => x.AgentIds);
return labelAgentIds.Union(settings.AgentIds);
IEnumerable labelAgentIds=labelGroups.SelectMany(x=>x.AgentIds);
返回labelAgentIds.Union(settings.AgentIds);
Select
将输入中的每个元素映射到输出中的另一个元素,SelectMany
将输入中的每个元素映射到输出中的任意数量的元素(可能是0,可能是1,可能更多).如果你满足于以显而易见的方式将IEnumerable
展平为IEnumerable
,那么你的朋友是:
IEnumerable<Guid> labelAgentIds = labelGroups.SelectMany(x => x.AgentIds);
return labelAgentIds.Union(settings.AgentIds);
IEnumerable labelAgentIds=labelGroups.SelectMany(x=>x.AgentIds);
返回labelAgentIds.Union(settings.AgentIds);
当
Select
将输入中的每个元素映射到输出中的另一个元素时,SelectMany
将输入中的每个元素映射到输出中的任意数量的元素(可能是0,可能是1,可能更多)。我认为您想展平IEnumerable
,然后使用SerlectMany
:
var allGuids = labelAgentIds.SelectMany(col => col).Union(settings.AgentIds);
Collection<Guid> result = new Collection<Guid>(allGuids.ToList());
var allGuids=labelAgentIds.SelectMany(col=>col).Union(settings.AgentIds);
收集结果=新收集(allGuids.ToList());
我想您应该将IEnumerable
展平,然后使用选择many
:
var allGuids = labelAgentIds.SelectMany(col => col).Union(settings.AgentIds);
Collection<Guid> result = new Collection<Guid>(allGuids.ToList());
var allGuids=labelAgentIds.SelectMany(col=>col).Union(settings.AgentIds);
收集结果=新收集(allGuids.ToList());