使用EF或linq(C#)搜索特定列中的单词

时间:2016-04-02 18:40:15

标签: c# entity-framework linq

搜索" word"的最佳方式是什么?在数据库中的列中。 我使用以下代码:

query.Where(x => x.Content.Contains(key));

问题是,如果列包含:"我2岁",当使用" year"这个词进行搜索时,它找不到它,但前面的代码示例找到了它。

另外,如果我尝试在键之前和之后添加空格,如下所示:

query.Where(x => x.Content.Contains(" " + key + " "));

它不会找到句子"一年前,我做了一个梦。",

另外,EF的资本和小写情况如何?

1 个答案:

答案 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)表示不区分大小写。