2011-10-19 8 views
1

ちょうど混乱を避けるために、私はlinqについてオブジェクトと何も話していません。 私はメモリ内でたくさんのオブジェクトを扱っているので、それらをフィルタリングする必要があります。 私たちは、ユーザーが多くの値を選択できる多くのオプションを備えた画面を持っています。LinqToObjectsのRegexとLike演算子

sqlの "Like"演算子と同様のものを実装する必要があります。 私はこのサイトでそれについての投稿を見つけて正規表現を使用しましたが、私はそれを一度も使用していません。 文字列パターンが正しいかどうかを知りたいです。 "%" "%"を使用しないでください。

startWith -endWithとcontainsの組み合わせを使用する必要があることも読んでいますが、どのようにしてそれを行うのかを知るために、それらを組み合わせたすべての例は見つかりませんでした。

あなたは、文字列は、使用することができます別のものを含んでいるかどうかを確認したい場合は、私はこの

string pattern = string.Format(".*{0}.*", criteria.SearchText); 
myList= myList.Where(x => x.Message.Like(pattern)).ToList(); 

public static bool Like(this string s, string pattern, RegexOptions options = RegexOptions.IgnoreCase) 
{ 
    return Regex.IsMatch(s, pattern, options); 
} 

任意の提案

答えて

5

ような何かを:

myList = myList.Where(x => x.Message.Contains(criteria.SearchText)).ToList(); 

または

myList = myList.Where(x => x.Message.IndexOf(criteria.SearchText) != -1).ToList(); 

(第2のバリアンあなたはRegexで、ユーザー定義の単語をミックスしたい場合は、ユーザーがa*を書き込むと、検索テキストがあるようにIndexOfであなたがCultureInfo

を指定することができますので、tは良いですが、あなたは、それをエスケープするRegex.Escape()を使用する必要がありますany number of aの代わりにa*です。

string pattern = string.Format(".*{0}.*", Regex.Escape(criteria.SearchText)); 

しかし書かれたとして、それはと同等だということに注意してください:あなたの正規表現にアンカーを入れていないので、正規表現はどこにも文字列で検索されますので、

string pattern = string.Format("{0}", Regex.Escape(criteria.SearchText)); 

あなたがたとえば、あなたが

string pattern = string.Format("^{0}", Regex.Escape(criteria.SearchText)); 

または

string pattern = string.Format("{0}$", Regex.Escape(criteria.SearchText)); 
+0

で終わるで始まる単語を検索したいので、ユーザー定義の単語を固定したい場合おかげでたくさんの意味を理解し始めて – user9969

関連する問題