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

时间:2013-10-18 07:00:48

标签: c# list

情景如下:

我正在为我的网站写一个Windows服务。它的使命是每天都这样做:

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

我知道A.Count()总是< =而不是b.Count()。

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

现在我有两个问题:

  1. 想象一下,我的域名为domain.com;如何从Windows服务中获取Images文件夹?
  2. 如何根据列表B区分列表A以找出应删除哪些图片?

2 个答案:

答案 0 :(得分:4)

使用linq,这应该如下:

var toDeleteList=listB.Except(listB.Intersect(listA));

<强>更新

刚刚发现了一种更精确的方式:

var toDeleteList=listB.Except(listA);

答案 1 :(得分:1)

创建比较器类。它将包含文件的参数,你要比较(在我的情况下名称和大小)。然后将上传文件的数据上传到某个数据表并将其链接到文件列表。将文件系统中的文件加载到另一个列表中。并使用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));