搜索db以查找包含引号的字符串时的奇怪行为

时间:2011-06-07 14:03:19

标签: c# sql linq-to-sql

我有一个搜索数据库的方法。部分搜索允许用户使用引号通过EXACT字符串进行搜索。有一个我遇到麻烦的特殊字符串;它被称为String "xyz"。请注意xyz周围的引号。如果用户在整个字符串周围放置引号,使其看起来像"String "xyz"",则不会返回数据库行。当用户只搜索String "xyz"时,它会正确返回。

以下是有问题的代码部分:

bool isExactSearchString = false;
if (searchString.StartsWith("\"") && searchString.EndsWith("\""))
{
    // remove first and last quotes
    searchString = searchString.Remove(0, 1);
    searchString = searchString.Remove(searchString.Length - 1, 1);

    isExactSearchString = true;
}

var result = from d in repository.GetAllTheTableRows()
             where (isExactSearchString ? d.Column == searchString : d.Column.Contains(searchString))
             select d.Driver;

因此,当字符串中有引号时,当搜索字符串被引号括起来时,result不会返回结果,但如果字符串周围的引号不包含引号,则会返回结果。这对我来说似乎很奇怪。有谁知道这是为什么?

1 个答案:

答案 0 :(得分:-1)

if (searchString.StartsWith("\"") && searchString.EndsWith("\""))
{

    // remove first and last quotes
    searchString = searchString.Remove(0, 1);
    searchString = searchString.Remove(searchString.Length - 1, 1);

    //
    // Replace all occurrences of " in searchString with \"
    //

    isExactSearchString = true;
}