2012-08-07 58 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;