2016-09-01 6 views
0

어떻게 줄을 확인하십시오. 둘 이상의 문자열을 포함 ("하나")합니까? 예를 들어 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를 발현 내부 작동하는지 모르겠어요?

관련 문제