在linq上搜索特殊字符

时间:2014-03-17 07:46:35

标签: linq entity-framework linq-to-sql

我需要像这样在linq上进行搜索。例如,我将在Name列上进行搜索,用户在文本框中输入“Ca?an”字样。对于这种情况,问号将用于sprecial搜索字符。 它将按名称列搜索,找到Canan,Calan,Cazan等。 我希望我能正确解释我的问题。 任何人都可以给我一个关于这个linq查询的想法。提前感谢...

2 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式(如果您使用的是C#)来检查“Ca?an”。

string d = "DDDDDDDDDDCasanDDDDDDDDDD";
Regex r = new Regex(@"Ca([a-zA-Z]{1})an");
string t = r.Match(d).Value;

输出将是:

“CASAN”

您将所有colum存储在数据库中,然后执行以下操作:

List<Person> list = new List<Person>(); //Filled
var res = list.Select(x => r.Match(x.Name));

输出将是一个IEnumerable,所有“人物”包含在名称“Ca?an”中,是?不管是哪个字母

答案 1 :(得分:0)

您需要将搜索语法转换为现有的搜索引擎 - 我建议使用Regex。所以步骤将是:

  1. 将输入的搜索字符串安全地转换为Regex-pattern
  2. 在Linq上使用name-property
  3. 执行搜索

    解决方案:

    1:通过替换'?'安全地转换搜索字符串使用Regex版本的wildchar:

    var userInput = "Ca?an";
    var regexPattern = Regex.Escape(userInput).Replace(@"\?", ".");
    

    2:在Linq中执行搜索(假设itemList实现了IEnumerable):

    var results = itemList.Where(item => Regex.IsMatch(item.Name, regexPattern));
    

    希望这有帮助!