使用 SqlMethods.Like 匹配整个单词

本文关键字:单词 SqlMethods Like 使用 | 更新日期: 2024-11-06 20:46:49

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

使用 SqlMethods.Like 匹配整个单词

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

因此,如果您搜索示例,您会找到"示例银行",而不是"示例银行"。

我不确定是否有使用 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)
         )

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

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