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

使用EF或linq(C#)在特定列中搜索单词,c#,entity-framework,linq,C#,Entity Framework,Linq,在数据库的列中搜索“单词”的最佳方法是什么。 我使用以下代码: query.Where(x => x.Content.Contains(key)); 问题是,如果列包含:“我2岁”,当使用“年”一词进行搜索时,它将不会找到它,但前面的代码示例会找到它 此外,如果我尝试在键前后添加空格,如下所示: query.Where(x => x.Content.Contains(" " + key + " ")); 它不会找到“一年前,我有一个梦想”这句话 还有,EF中的大写字母和小写字母呢

在数据库的列中搜索“单词”的最佳方法是什么。 我使用以下代码:

query.Where(x => x.Content.Contains(key));
问题是,如果列包含:“我2岁”,当使用“年”一词进行搜索时,它将不会找到它,但前面的代码示例会找到它

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

query.Where(x => x.Content.Contains(" " + key + " "));
它不会找到“一年前,我有一个梦想”这句话


还有,EF中的大写字母和小写字母呢

这里有一种方法可以做到这一点,只需找到整个单词。将以下代码插入LinqPad进行测试。然而,Regex是使这项工作的强大力量,并且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)表示不区分大小写。

检查此项它可以帮助您=>这是区分大小写的。.它只取决于表或整个数据库的排序规则。把它切掉。
\b*((?i){0}(?-i))\b