2011-10-20 3 views
2

사용자는 텍스트 상자에 여행지에서 찾을 키워드를 입력합니다. 때때로, 그들은 단지 등 "핫"때때로 "고온 다습 한 폭풍"을 입력LINQ에서 동적 쿼리를 만드는 방법은 무엇입니까?

이 코드는 하나의 키워드를 작동

:

where d.Element("Description").Value.Contains(textBox1.Text) 

어떻게 쿼리를 구축하기 위해 코드를 수정 않는 때문에 어떤 수의 키워드에도 적용됩니까? 텍스트 상자에 입력 한 모든 키워드는 일치해야합니다.

답변

1

나는 항목의 적용 여부를 검색 할 말은 가정 :

where textBox1.Text.Split(' ').All(t => d.Element("Description").Value.Contains(t)) 
+0

나는 모든 키워드를 찾고 있습니다. 감사. – user776676

1
var keywords = textBox1.Text.Split(' '); 
//------- 
.Where(e => keywords.All(w => d.Element("Description").Value.Contains(w))) 

당신은 All 또는 Any 방법을 사용할 수 있습니다. 그것은 당신의 필요에 달려 있습니다.

4

먼저 나는 그런 다음 textBox1.Text에서이 말을 끊고 ContainsAny에 공급하는 String.Split 방법을 사용할 수있는 String

public static bool ContainsAny(this string source, IEnumerable<string> values) { 
    foreach (var cur in values) { 
    if (source.Contains(cur)) { 
     return true; 
    } 
    } 
    return false; 
} 

에 여러 값을 찾고 캡슐화 String에 대한 ContainAny 확장 메서드를 정의하는 것

where d.Element("Description").Value.ContainsAny(textBox1.Text.Split(' ')); 
관련 문제