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

标签 c# linq

我的方法需要返回一个包含 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>labelAgentIdsIEnumerable<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/

相关文章:

c# - JSON 到数组 C#

c# - 将加载配置添加到asp.net core中的注入(inject)依赖项

jquery - 从 jquery 中的另一个数组创建一个项目数组

c# - 在列表中查找与数组中的元素匹配的对象

c# - 在 C# 泛型类型上强制执行任意函数

c# - 在文件夹中创建类时更改默认命名空间 (Visual Studio)

c# - Unity 增加一个值然后减少它(DayNightCycle)

C# 显示表格中的某些行

c# - 使用 Linq 和 lambda 来展平列表

c# - 检查List是否包含特定类型(多个)