Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Version Of SQL LIKE

Tags:

string

c#

.net

sql

Is there any way to search patterns in strings in C#?

Something like Sql LIKE would be very useful.

like image 389
Ahmet Altun Avatar asked Mar 24 '11 09:03

Ahmet Altun


2 Answers

Regular expressions allow for everything that LIKE allows for, and much more, but have a completely different syntax. However, since the rules for LIKE are so simple(where % means zero-or-more characters and _ means one character), and both LIKE arguments and regular expressions are expressed in strings, we can create a regular expression that takes a LIKE argument (e.g. abc_ef% *usd) and turn it into the equivalent regular expression (e.g. \Aabc.ef.* \*usd\z):

@"\A" + new Regex(@"\.|\$|\^|\{|\[|\(|\||\)|\*|\+|\?|\\").Replace(toFind, ch => @"\" + ch).Replace('_', '.').Replace("%", ".*") + @"\z" 

From that we can build a Like() method:

public static class MyStringExtensions {   public static bool Like(this string toSearch, string toFind)   {     return new Regex(@"\A" + new Regex(@"\.|\$|\^|\{|\[|\(|\||\)|\*|\+|\?|\\").Replace(toFind, ch => @"\" + ch).Replace('_', '.').Replace("%", ".*") + @"\z", RegexOptions.Singleline).IsMatch(toSearch);   } } 

And hence:

bool willBeTrue = "abcdefg".Like("abcd_fg"); bool willAlsoBeTrue = "abcdefg".Like("ab%f%"); bool willBeFalse = "abcdefghi".Like("abcd_fg"); 
like image 114
Jon Hanna Avatar answered Oct 04 '22 02:10

Jon Hanna


There are couple of ways you can search as "LIKE" operator of SQL in C#. If you just want to know whether the pattern exists in the string variable, you can use

string value = "samplevalue";         value.Contains("eva"); // like '%eva%'          value.StartsWith("eva");  // like 'eva%'         value.EndsWith("eva"); // like '%eva' 

if you want to search the pattern from a list of string, you should use LINQ to Object Features.

            List<string> valuee = new List<string> { "samplevalue1", "samplevalue2", "samplevalue3" };         List<string> contains = (List<string>) (from val in valuee                                         where val.Contains("pattern")                                         select val); // like '%pattern%'          List<string> starts = (List<string>) (from val in valuee                                       where val.StartsWith("pattern")                                       select val);// like 'pattern%'          List<string> ends = (List<string>) (from val in valuee                                                               where val.EndsWith ("pattern")                                     select val);// like '%pattern' 
like image 42
Foyzul Karim Avatar answered Oct 04 '22 02:10

Foyzul Karim