SQL LIKE等效于C#

时间:2015-02-13 20:10:02

标签: c# linq wildcard sql-like

我的问题使用以下代码 -

string searchString = dropdownlist.SelectedValue;

List objects = (from o in Object.List()
                       where dropdownlist.SelectedIndex <= 0 || 
                           o.CustomField.Contains(searchString)
                       orderby o.Date descending
                       select order).ToList();

我遇到的情况如下 - 下拉列表中的项目是通用消息,例如“客户'{0}'有'{1}'订单”。在对象方面,o.CustomField看起来像“客户'鲍勃'有'5'订单”。显然,这意味着

o.CustomField.Contains(searchString)

不会返回任何内容。我一直在研究通配符,但未能获得成功的回报。这就是我尝试设置通配符的方法:

searchString = dropdownlist.SelectedValue.Replace("{0}", "*").Replace("{1}", "*");

我想知道是否有更干净的方式,而不是坐下来解析'{'或'}'之间的所有不同的子串。

3 个答案:

答案 0 :(得分:0)

您可以使用正则表达式来实现目标。请参阅Regex.Match方法。 您可以将选定的字符串从下拉列表转换为正则表达式,然后在LINQ查询中使用Match方法。

Regex r = new Regex(String.Format ("Customer {0} has {1} orders", "([^\s]+)",  "([^\s]+)"));

此代码:

o.CustomField.Contains(searchString)

然后可以更改为:

r.Match(o.CustomField).Success

答案 1 :(得分:0)

只需{\d+}上的Regex.Replace,将其替换为*

类似的东西:

string s = Regex.Replace(input, @"{\d+}", "*");

答案 2 :(得分:0)

尝试提及的方法here 或者使用field.StartsWith("Customers") && field.EndsWith("orders") && field.Contains("has")

的组合