2012-08-07 48 views
-2

我的代码全字匹配是类似条款在正则表达式如下:使用SqlMethods.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)'。

+1

请举个例子。 – egrunin 2012-08-07 16:41:46

+2

-1:这个问题很没用,没有“错过”有效结果的例子 – 2012-08-07 16:44:13

+0

增加了一个例子 – stats101 2012-08-07 16:47:29

回答

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) 
     ) 
0

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

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