搜索" word"的最佳方式是什么?在数据库中的列中。 我使用以下代码:
query.Where(x => x.Content.Contains(key));
问题是,如果列包含:"我2岁",当使用" year"这个词进行搜索时,它找不到它,但前面的代码示例找到了它。
另外,如果我尝试在键之前和之后添加空格,如下所示:
query.Where(x => x.Content.Contains(" " + key + " "));
它不会找到句子"一年前,我做了一个梦。",
另外,EF的资本和小写情况如何?
答案 0 :(得分:0)
这是一种方法,只需找到整个单词。将以下代码插入LinqPad进行测试。然而,正则表达式是使这项工作和Regex慢于.Contains的力量。
void Main()
{
List<string> testStrings = new List<string>();
testStrings.Add("I am 2 years old");
testStrings.Add("Year ago, I had a dream.");
var searchValue = "year";
string expression = String.Format(@"\b*((?i){0}(?-i))\b", searchValue);
Regex regex = new Regex(expression);
var found = testStrings.Where(s => regex.Matches(s).Count > 0);
found.Dump();
}
正则表达式的工作原理如下:
\b*((?i){0}(?-i))\b
\ b表示整个单词,(?i)表示不区分大小写。