linq - 如何使用 linq 遍历所有图像,但只搜索这些图像中字符串的一部分?
问题描述
我有一个集合images
。它们都是根据它们的用途命名的。对于徽标,他们遵循惯例business_logo
,对于日志,他们遵循惯例business_logbook
。
现在我想对LinQ
所有图像进行迭代,找到包含(_logbook)
的图像,这样我就可以删除该日志中的图像。如果我从上下文中删除它,它将自动从 wwwroot 中删除。
查询也需要是异步的。
解决方案
您选择路径包含您正在搜索的字符串的项目:
public class Image
{
public string Name { get; set; }
}
var _imageRepo = new Collection<Image>()
{
new Image { Name = "business_logo_123954.png" },
new Image { Name = "business_logbook_529429.png" },
new Image { Name = "business_logo_81957.png" },
new Image { Name = "business_logbook_234820.png" }
};
var logBookImages = await _imageRepo
.Where(x => x.Name.Contains("_logbook"))
.ToListAsync();
// Or you can check that the file name starts with business_logbook.
var logBookImages = await _imageRepo
.Where(x => x.Name.StartsWith("business_logbook"))
.ToListAsync();
Linq 查询既不是异步的,也不是同步的。在您调用查询的各种具体化方法之一之前,不会执行查询。在您的情况下,由于您希望数据以异步方式实现,因此您需要调用 .ToListAsync() 而不是 .ToList()。这样做,您还需要将 await 关键字添加到语句中。
我建议先获取您的项目集合,然后再删除它们,但这取决于您的偏好以及您使用的数据库系统/模式。
var logBookImagePathsToDelete = await _imageRepo
.Where(x => x.Path.StartsWith("business_logbook"))
.Select(x => x.Path)
.ToListAsync();
foreach(var path in logBookImagePathsToDelete)
await DeleteImageAsync(path);
如果您想在一个操作中完成所有操作而不创建任何变量,您可以执行类似于以下的操作:
(await _imageRepo
.Where(x => x.Path.Contains("_logbook"))
.Select(x => x.Path)
.ToListAsync())
.ForEach(async path => await DeleteImageAsync(path));
推荐阅读
- r - 为什么 R 文档指出可能出现大于最大归一化浮点数的数字?
- java - onBindViewHolder 在 android studio java 中不起作用
- jenkins - 从 Appcenter 触发 Jenkins 作业
- terminal - Scrapy shell 终端有一个 emacs 扩展,可以自动完成我的命令
- arrays - PowerShell - 从数组中删除项目
- javascript - TypeError:无法读取未定义的属性“查询”(react.js)
- java - 对象不可序列化(类:org.apache.hadoop.io.LongWritable,值:1166)
- mysql - MYSQL DATE_FORMAT 转换
- css - 如果 webkit-fliter 亮度与过滤器亮度不匹配会怎样?
- android - Gradle 任务 assembleDebug 失败,退出代码为 1.* 出了什么问题: