繁体   English   中英

SQL LIKE等效于C#

[英]SQL LIKE Equivalent in C#

我的问题使用以下代码 -

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}", "*");

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

您可以使用正则表达式来实现目标。 请参阅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

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

就像是:

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

尝试这里提到的方法或使用field.StartsWith("Customers") && field.EndsWith("orders") && field.Contains("has")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM