删除除外的元素

时间:2013-08-23 16:32:37

标签: c# .net linq

下面我有一个方法可以删除除最新版本之外的所有文件版本。我的Except电话没有产生我期待的结果,在再次查看文档后,我似乎无法理解为什么。出于调试的目的,我已经将Except的LINQ查询移出了foreach条件。当我将调试newest正确设置为最新的日志文件时,在下一行执行后toDelete仍包含newest,为什么?我在这里错过了什么?所有相关代码如下。该方法被调用传递,文件设置为日志名称的静态部分,之后它有一个时间戳。 Where(x => x.Contains(file))都与我期望的完全一样。

public static void CleanUpLocalCopies(string file)
{
    string[] localFiles = Directory.GetFiles(".\\");

    string newest = files.Where(x => x.Contains(file)).OrderByDescending(x => x).FirstOrDefault();
    var toDelete = localFiles.Where(x => x.Contains(file)).Except(new string[] { newest });

    foreach (string f in toDelete)
    {
        File.Delete(f);
    }
}

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用skip直接跳过第一个文件,并避免Except调用:

var toDelete = files.Where(x => x.Contains(file)).OrderByDescending(x => x).Skip(1);