Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对不同类型的集合使用Union?_C#_Linq - Fatal编程技术网

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());