Csharp 将一系列序列展平为单个序列(List 中的 List 包含该 List)

我正在try 将一些字符串列表提取到单个列表中. 首先,我要上这节课

public class Client
{
  public string Name { get; set; }

  public List<string> ApiScopes { get; set; }
}

因此,我得到的响应是List<Client>,我的目的是将所有客户端的作用域都放入一个列表中,而不会循环 我在LINQ上试过了:

 var x = clients.Select(c=> c.AllowedScopes.Select(x => x).ToList()).ToList();

这将返回List<List<string>>,我只想将所有这些内容放入一个不同的字符串列表中.

推荐答案

这听起来像是您想要SelectMany(它将一系列序列拼合成一个序列),如果您需要一个列表,每个范围只出现一次,即使它存在于多个客户端,Distinct也是如此:

var scopes = clients.SelectMany(c => c.ApiScopes).Distinct().ToList();

这假设Client.ApiScopes永远不为空.如果它可能为空,则需要多做一点工作:

var scopes = clients
    .SelectMany(c => ((IEnumerable<string>) c.ApiScopes) ?? Enumerable.Empty<string>())
    .Distinct()
    .ToList();

Csharp相关问答推荐

如何设置和接收自定义Visual Studio项目命令的参数

后台线程上的延迟WriteableBitmap写入导致闪烁

如何禁用ASP.NET MVP按钮,以便无法使用开发人员控制台重新启用它

图形.DrawString奇怪异常的字距调整

如何在NServicebus中配置学习传输的文件夹(NService bus 8)

将委托传递到serviceccollection c#web API

将列表字符串映射为逗号分隔字符串<>

如何注册接口类型,类型<>

C#方法从AJAX调用接收NULL

ASP.NET核心REST API返回一个非常大的数字

异步任务调用程序集

在被Interactive Server切换后,Blazor SSR页面无法正确加载JS

在C#中,是否有与变量DISARD对应的C++类似功能?

当空判断结果赋给变量时,为什么会出现可能空异常警告的解引用?

CRL已过期,但ChainStatus告诉我RevocationStatus未知

Blazor:搜索框在第一次搜索时不搜索

C#中类库项目的源代码生成器

在同一个捕获中可以有多种类型的异常吗?

为什么Swashbakle/Swagger在参数中包含变量名?

仅在ASP.NETCore应用程序中的附加单独端口上公开一组终结点