2016-06-24 5 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をほとんど知らず、Imはこれを行うための適切なクエリを書くことができません。 ヘルプは評価されています。あなたにこれは動作するはず

+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私はそのために新しい機能を実行しますが、それはまさにそれです。それが存在する場合、私はちょうど真実を返す – 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

の下で、同じバージョンのフォルダのパスを取得するにはどうすればよいですか?私は、linq:\ – LikeIfYouCaredAboutMyName

+0

@ LikeIfYouCaredAboutMyNameを更新する必要があります。 – user3185569

+0

thx男私はそれをテストします。 Linqのチュートリアルをお勧めしますか? – LikeIfYouCaredAboutMyName

関連する問題