2016-09-01 17 views
0

line.Contains( "One")で複数の文字列をどのようにチェックインするのですか?たとえば、selectファイルに "names" Listのテキスト要素を含む行が含まれているとします。C#Linq。文字列のリストを含む

private void button_Click(object sender, RoutedEventArgs e) 
{ 
    List<string> names = new List<string>() { "One", "Two", "Three" }; 

    try 
    { 
    var files = from file in Directory.EnumerateFiles(@"D:\Logs\", "*.log", SearchOption.AllDirectories) 
       from line in File.ReadLines(file) 
       where line.Contains("One") 
       select new 
       { 
        File = file, 
        Line = line 
       }; 

    foreach (var f in files) 
    { 
     Debug.WriteLine("{0}\t{1}", f.File, f.Line); 
    } 
    //MessageBox.Show(files.Count().ToString() + " record found."); 
    } 
    catch (UnauthorizedAccessException UAEx) 
    { 
    Console.WriteLine(UAEx.Message); 
    } 
    catch (PathTooLongException PathEx) 
    { 
    Console.WriteLine(PathEx.Message); 
    } 
} 
+1

あなたは 'line.Contains(" One ")を意味しますか? line.Contains( "names") '? – juharr

+1

申し訳ありませんが、少し質問を明確にしてください。英語は少し不明です。 – LordWilmore

+0

あなたは 'Contains'の代わりに' any'を使う必要があります – Neil

答えて

4
var files = from file in Directory.EnumerateFiles(@"D:\Stary komp\Logi\Logs2\", "*.log", SearchOption.AllDirectories) 
      from line in File.ReadLines(file) 
      where names.Any(name => line.Contains(name)) 
      select new 
      { 
       File = file, 
       Line = line 
      }; 
+0

ありがとう!正常に動作します。 –

0

あなたは、おそらくこのような何かを使用しようとすることができますが、

line.Intersect(names).Any() 

を、私はそれがLINQの式の内部で動作するかどうかわからないんだけど?

関連する問題