2016-06-29 7 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

あなたのアプリを有効にするために、あなたはナゲット[ファジーロジック]パッケージ(https://www.nuget.org/packages/DuoVia.FuzzyStrings/)の1つを検討することに興味があるかもしれません実際のデータの近似値のみが与えられたときに結果を返す。 – Veverke

答えて

1

あなたはstring入力stringが含まれている場合だけチェック、代わりに等価比較で、あなたのAnyの述語でそれを確認することができます。

あなたは次のように行うことができます:あなたは大文字小文字を区別しない検索が必要な場合は、次の操作を行うことができます

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

関連する問題