如何根据另一个列表减少一个列表
本文关键字:列表 一个 何根 另一个 | 更新日期: 2023-09-27 18:35:49
场景是这样的:
我正在为我的网站编写一个窗口服务。它的任务是每天这样做:
它应该从数据库中获取保存图像的列表,并将其设置为列出A
。并获取上传到服务器的文件列表并将其设置为列出B
。
我知道 A.Count() 总是比 b.Count() <= 的。
它应该删除那些存在于列表B
中但不存在于列表A
中的上传文件。
现在我有两个问题:
- 想象一下,我的域名是
domain.com
;如何从Windows服务获取其中的Images
文件夹? - 如何根据列表
A
区分列表B
以找到应该删除哪些图像?
对于 linq,这应该如下所示:
var toDeleteList=listB.Except(listB.Intersect(listA));
更新:
只是发现了一种更精确的方法:
var toDeleteList=listB.Except(listA);
创建比较器类。它将包含您要比较的文件的参数(在我的情况下名称和大小)。然后将上传的文件一起上传到某个数据表,并将其linq到文件列表。将文件从文件系统加载到另一个列表。并使用 Victor Mukherjee aproach 查找结果列表。
您的文件类:
class UniqeFile
{
public string FileName;
public long Length;
}
您的代码:
DataTable yourDataTable;
DateTime yourBeginDateTime, yourEndDateTime;
var listA = new DirectoryInfo("yourPath").GetFiles().Where(fl => fl.CreationTime >= yourBeginDateTime && fl.CreationTime >= yourEndDateTime).Select(fl => new UniqeFile() { FileName = fl.Name, Length = fl.Length }).ToList();
var listB = yourDataTable.Select().Select(dr => new UniqeFile() { FileName = dr["fileName"].ToString(), Length = long.Parse(dr["fileSize"].ToString()) }).ToList();
var ListC = listB.Except(listB.Intersect(listA));