IConfiguration.GetSection 使用 Where 选择器

IConfiguration.GetSection with Where selector

我正在使用 IConfiguration.GetSection 从配置文件中检索配置信息:

var loggingProviders = Config.GetSection( "Logging" ).Get<LoggingProviders>();

效果很好,但我只想检索已启用的条目,因此我想执行以下任一操作:

var loggingProviders = Config.GetSection( "Logging" ).Get<LoggingProviders>().Where( x => x.Enabled == true );

var loggingProviders = Config.GetSection( "Logging" ).Where( x => x.Enabled == true ).Get<LoggingProviders>();

但我总是走入死胡同,如有任何建议,我们将不胜感激!

如果要使用.Where,需要是列表,这里有一个demo:

public class LoggingProviders
    {
        public int Id { get; set; }
        public bool Enabled { get; set; }
    }

appsettings.json:

"Logging1": [
    {
      "Id": "1",
      "Enabled": "true"
    },
    {
      "Id": "2",
      "Enabled": "true"
    },
    {
      "Id": "3",
      "Enabled": "false"
    }
  ]

启动:

public IConfiguration Configuration { get; }
...
List<LoggingProviders> loggingProviders = Configuration.GetSection("Logging1").Get<List<LoggingProviders>>().Where(x => x.Enabled == true).ToList();

结果:

如果你没有得到列表,想使用.where,你可以尝试将其更改为列表first.Here是一个演示。 appsettings.json:

"Logging1": 
    {
      "Id": "1",
      "Enabled": "true"
    },

启动:

public IConfiguration Configuration { get; }
    ...
List<LoggingProviders> l= new List<LoggingProviders>();
l.Add(Configuration.GetSection("Logging1").Get<LoggingProviders>());
List<LoggingProviders> loggingProviders = l.Where(x => x.Enabled == true).ToList();

结果: