实体框架:在搜索项目时忽略标记/特殊字符

时间:2016-05-17 10:25:28

标签: c# sql-server entity-framework tsql sql-server-2012

我的数据库表包含带有BBCODES的文本

QuestionId | QuestionText             

 1         | What is your [u]name[/u]?

 2         | [i]How[/i] old are you?

我需要使用包含搜索字符串的表格中的EF搜索所有记录而不管bbcodes。

所以,以下代码什么都不返回:

var searchTerm = "your name".ToLower();
var query = _repository.GetAll().Where(question=>question.QuestionText.ToLower().Contains(searchTerm))

但我需要获得第一张唱片。

搜索记录时忽略特殊标记的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以在白色空间中拆分搜索短语,以获取要搜索的单独字词,然后使用更多LINQ来查找匹配项目。使用字符串列表而不是EF类的简单示例:

List<string> Questions = new List<string>();
Questions.Add("What is your [u]name[/u]?");
Questions.Add("[i]How[/i] old are you?");

String searchTerm = "your name".ToLower();
String[] searchPhrases =  searchTerm.Split(null);

var matching = (from question in Questions
            where searchPhrases.Any(searchPhrase => question.Contains(searchPhrase))
            select question);

它应该有用,只要你搜索的单词中没有任何一个都有BBCODES。