2016-06-29 2 views
0

ObservableCollection에서 특정 항목을 찾을 수있는 항목을 검색하려고합니다. 이 경우 내 항목은 '아티스트'입니다. 기본적으로 사용자가 아티스트 이름을 입력 할 수있는 검색 바입니다. ObservableCollection에서 부분 일치 값을 찾으려면 어떻게합니까?

나는 이런 짓을 그리고 그것은 작동하지만 사용자가 동일한 값을 넣어 가지고 : 나는 내 컬렉션, 사용자가 "데이비드"를 입력하고 모두 검색 할 수있는 부분 일치를 찾을 수있는 방법

//user type "david guetta" 
    if (myCollection.Any(x => x.artist== input.Value)) 
    { 
     //... 
    } 

을 이 문자열을 포함하는 아티스트들?

정규식을 문자열 배열과 함께 사용하려고 했는데도 효과가있었습니다. 그러나 컬렉션과 동일한 작업을 수행 할 수 없습니다.

string[] artists= 
{ 
    "Malcom George", 
    "Willis H. David", 
    "David Bowie", 
    "Davidson" 
}; 

string pattern = input.Value; 

foreach (string s in artists) 
{ 
    if (Regex.IsMatch(s, pattern, RegexOptions.IgnoreCase)) 
    { 
     // ... 
    } 
} 
+0

항목의 일부가 아닌 모든 단어가 제공 될 때 결과를 검색 할 수있을뿐만 아니라 그의 답변에서 Matteo가 ​​제안한 라인에 의해 수행), 앱을 활성화하기 위해 nuget [Fuzzy logic] 패키지 (https://www.nuget.org/packages/DuoVia.FuzzyStrings/) 중 하나를 고려하는 데 관심이있을 수 있습니다 실제 데이터의 근사값 만 제공되는 경우 결과를 반환합니다. – Veverke

답변

1

당신은 대신 동등 비교, 당신의 Any의 조건에서 그것을 확인 string 입력 string가 포함되어있는 경우 바로 확인 할 수 있습니다.

당신은 다음과 같이 할 수 있습니다 : 당신은 대소 문자를 구분 검색을해야하는 경우

myCollection.Any(x => x.artist.Contains(input.Value)) 

는 다음을 수행 할 수 있습니다

myCollection.Any(x => x.artist.IndexOf(input.Value, StringComparison.InvariantCultureIgnoreCase) >= 0) 

이 개체를 얻으려면을, 당신은 어떤

의 경우 방법 대신 사용할 수 있습니다
myCollection.Where(x => x.artist.Contains(input.Value)) 

myCollection.Where(x => x.artist.IndexOf(input.Value, StringComparison.InvariantCultureIgnoreCase) >= 0) 
+0

당신의 솔루션은 정상적으로 작동하지만 일치하는 항목을 얻을 때 어떻게 전체 객체를 검색 할 수 있습니까? 제목, 연도 등 다른 항목이 있습니다. – ozer

+0

@ozer 당신은 입력 문자열에 대해 모든 구성원 (제목, 년 ...)을 확인하고 싶습니까? –

+0

예 입력 문자열이 일치 항목을 얻을 때 전체 객체를 가져 오는 내 색인이됩니다. – ozer

관련 문제