2016-06-24 3 views
-2

У меня есть эта функция, в которой вы передаете путь к каталогу, содержащему имя папки, например UPDATE_20162406_x.xx (версия), файлы всегда будут иметь одинаковое начало, но дата и версия будут разными, теперь мне нужно передать путь к UPDATE_someDATE_x.xx функции, которая проверяет, есть ли какая-либо другая папка с той же версией, это запрос, который у меня есть, который нужно изменить:Поиск папки с таким же именем с использованием Linq C#

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 почти ничего, и я не могу написать правильный запрос, чтобы сделать это. Любая помощь приветствуется. спасибо

+1

Вы пробовали с помощью 'Directory.GetDirectories (путь)' метод? Это возвращает 'string []' всех каталогов в указанном вами пути. Затем вы можете сделать «.Where (x => x.StartsWith (« UPDATE _ »)), чтобы получить коллекцию из этих папок :) Ссылка здесь: https://msdn.microsoft.com/en-us/library /c1sez4sc(v=vs.110).aspx –

+0

Ваш код получает самую последнюю версию. Так ? Вы хотите передать номер версии этому методу и проверить, есть ли у вас другая папка с той же версией? – user3185569

+0

@ user3185569 Я сделаю для этого новую функцию, но да, это именно так. и если он существует, я просто возвращаю true – LikeIfYouCaredAboutMyName

ответ

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; 
} 
+0

, который кажется прекрасным, как я могу получить путь к папке с той же версией? damn Мне нужно leatn linq: \ – LikeIfYouCaredAboutMyName

+0

@LikeIfYouCaredAboutMyName обновлено. – user3185569

+0

thx man Я буду тестировать его. Не могли бы вы посоветовать некоторые учебники Linq? – LikeIfYouCaredAboutMyName