使用SqlMethods.Like匹配整个单词

时间:2012-08-07 16:40:49

标签: c# asp.net linq

我的代码如下,在like子句中使用正则表达式:

string f = "example";

var likestr = string.Format("%[^a-zA-Z]{0}[^a-zA-Z]%", f);

var q = SearchColumn.Where(x => SqlMethods.Like(x.Search_Col, likestr));

虽然它返回值,但它会错过有效的结果。

例如,在搜索“示例”时,它会找到“示例银行”,但找不到“示例个人财务(EPF)”。

2 个答案:

答案 0 :(得分:1)

我猜测问题是你的需要一个字符而不是字母,而不是在你的搜索条件之前和之后,如果标准是在开头或结尾处,那么它将不起作用你的数据库字段。

因此,如果您搜索示例,则会找到“示例库”,但不会找到“示例库”。

我不确定是否有更快的方式使用Sql,但这应该有效。

var f = "example"'

var likestr1 = string.Format("%[^a-zA-Z]{0}[^a-zA-Z]%", f);
var likestr2 = string.Format("%[^a-zA-Z]{0}", f);
var likestr3 = string.Format("{0}[^a-zA-Z]%", f);


var q = SearchColumn.Where(x => 
           SqlMethods.Like(x.Search_Col, likestr1) || 
           SqlMethods.Like(x.Search_Col, likestr2) || 
           SqlMethods.Like(x.Search_Col, likestr3) ||
                          (x.Search_Col == f)
         )

答案 1 :(得分:0)

为什么你不使用Contains()方法?

var f = "example"
var q = from x in MyTable where x.Search_Col.Contains(f) select x;