-2

我的代码如下,在 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));

尽管它返回值,但它错过了有效的结果。

例如,当搜索“example”时,它会找到“An Example Bank”,但找不到“Example Personal Finance (EPF)”。

4

2 回答 2

1

我猜问题是您的喜欢在搜索条件之前和之后都需要一个字母以外的字符,并且如果条件位于数据库字段的开头或结尾,则该字符将不起作用。

因此,如果您搜索 Example,您会找到“An Example Bank”,而不是“Example Bank”。

我不确定是否有更快的方法使用 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)
         )
于 2012-08-07T18:42:18.690 回答
0

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

var f = "example"
var q = from x in MyTable where x.Search_Col.Contains(f) select x;
于 2016-02-12T08:39:12.100 回答