【问题标题】:Finding a folder that has the same name using Linq c#使用Linq c#查找具有相同名称的文件夹
【发布时间】:2016-06-24 08:56:45
【问题描述】:

我有这个功能,您可以将路径传递到包含文件夹名称的目录,例如 UPDATE_20162406_x.x.x(版本)文件将始终具有相同的开头,但日期和版本会有所不同,我需要什么现在是将 UPDATE_someDATE_x.x.x 的路径传递给一个检查是否有任何其他文件夹具有相同版本的函数,这是我需要更改的查询:

 public string NewestUpdate(string Directoria)
        {
            string caminho = "";
            Version version = null;
            var lastVersion = new DirectoryInfo(Directoria).EnumerateDirectories()
            .Where(d => d.Name.ToLower().StartsWith("update_"))
        .Select(d => new { Directory = d, Token = d.Name.Split('_') })
        .Where(x => x.Token.Length == 3 && Version.TryParse(x.Token[2], out version))
        .Select(x => new { x.Directory, Date = x.Token[1], Version = version })
        .OrderByDescending(x => x.Version)
        .FirstOrDefault();
            if (lastVersion != null)
            {

                caminho = lastVersion.Directory.FullName.ToString();
                Global.LatestVersion = lastVersion.Version.ToString();
            }

            return caminho;

        }

我对 linq 几乎一无所知,而且我无法编写正确的查询来执行此操作。 任何帮助都将不胜感激。谢谢

【问题讨论】:

  • 您是否尝试过使用Directory.GetDirectories(path) 方法?这将返回您指定路径中所有目录的string[]。然后您可以执行.Where(x => x.StartsWith("UPDATE_")) 来获取这些文件夹的集合:) 参考这里:msdn.microsoft.com/en-us/library/c1sez4sc(v=vs.110).aspx
  • 您的代码完美获取最新版本。所以 ?您想将版本号传递给此方法并检查是否有另一个具有相同版本的文件夹?
  • @user3185569 我会为此做一个新功能,但确实如此。如果它存在,我只返回 true
  • @LikeIfYouCaredAboutMyName 检查下面的答案

标签: c# linq path directory


【解决方案1】:

这应该可行:

public static bool NewestUpdate(string Directoria, Version queryVersion)
{
    Version version = null;
    var foundFolder = (from d in new DirectoryInfo(Directoria).EnumerateDirectories()
                        where d.Name.ToLower().StartsWith("update_")
                        let token = d.Name.Split('_')
                        let vers = token.Length == 3 && Version.TryParse(token[2], out version) ? version : null
                        where vers == queryVersion
                        select d).FirstOrDefault();

    string directory = foundFolder?.FullName;

    return foundFolder != null;
}

【讨论】:

  • 好像没问题,如何获取相同版本的文件夹路径?该死的我需要学习 linq :\
  • 谢谢,我将对其进行测试。你能推荐一些 Linq 教程吗?
  • @LikeIfYouCaredAboutMyName 请接受这个答案。这是来自微软的好教程:code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
猜你喜欢
  • 2023-01-11
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多