如何根据另一个列表减少一个列表

本文关键字:列表 一个 何根 另一个 | 更新日期: 2023-09-27 18:35:49

场景是这样的:

我正在为我的网站编写一个窗口服务。它的任务是每天这样做:

它应该从数据库中获取保存图像的列表,并将其设置为列出A。并获取上传到服务器的文件列表并将其设置为列出B

我知道 A.Count() 总是比 b.Count() <= 的。

它应该删除那些存在于列表B中但不存在于列表A中的上传文件。

现在我有两个问题:

  1. 想象一下,我的域名是domain.com;如何从Windows服务获取其中的Images文件夹?
  2. 如何根据列表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));