[英]Convert foreach to be part of LINQ query (C#)
我目前有一个LINQ查询来获取一些JSON文件,然后运行一个foreach循环将JSON转换为对象。 最终,我希望有一个可以使用的List<Config>
。
有什么方法可以将其组合到LINQ查询中,所以我只有一条语句,文件的类型为List<Config>
?
var files = Directory.GetFiles(PATH, "*.*", SearchOption.AllDirectories).Where(s => s.Contains(CONFIG_NAME));
List<Config> lc = new List<Config>();
foreach (var file in files)
{
Config config = JsonConvert.DeserializeObject<Config>(File.ReadAllText(file));
lc.add(config);
}
感谢您的时间
var configs =
Directory
.GetFiles(PATH, "*.*", SearchOption.AllDirectories)
.Where(s => s.Contains(CONFIG_NAME))
.Select(x => JsonConvert.DeserializeObject<Config>(File.ReadAllText(x)));
.ForEach是List<T>
。 其结果是,你需要调用.ToList()
在你的谓语前,你可以调用.ForEach()
因为目前你正在返回的投射,而不是实际列表。
就是说,这实际上并不能满足您的需求,因为.ForEach()
返回void。 您需要.Select() 。
var configs = Directory.GetFiles(PATH, "*.*", SearchOption.AllDirectories)
.Where(s => s.Contains(CONFIG_NAME))
.Select(x => JsonConvert.DeserializeObject<Config>(x.ReadAllText(x)))
.ToList();
我认为与此类似的东西会起作用:
var result = (from f
in Directory.GetFiles(PATH, "*.*", SearchOption.AllDirectories)
where f.Contains(CONFIG_NAME)
select JsonConvert.DeserializeObject<Config>(File.ReadAllText(f)) ).ToList();
使用.Select()方法( Docs )
因此您的代码将是:
var files = Directory.GetFiles(PATH, "*.*", SearchOption.AllDirectories).Where(s => s.Contains(CONFIG_NAME));
var configs = files.Select(f => JsonConvert.DeserializeObject<Config>(File.ReadAllText(f)));
或一行
var configs = Directory.GetFiles(PATH, "*.*", SearchOption.AllDirectories).Where(s => s.Contains(CONFIG_NAME)).Select(f => JsonConvert.DeserializeObject<Config>(File.ReadAllText(f)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.