C#搜索过滤器 - 忽略特定的变音符号

时间:2016-02-25 16:01:00

标签: c# linq diacritics

我正在编写一个程序,我正在使用LINQ搜索到SQL Server数据库(虽然这可能会在某些时候发生变化)。我想为某些变音符号制作过滤器,例如搜索波形符号而不是限制符号。我已经看到了如何忽略所有的例子,但没有人说如何忽略特定的例子。我是否只需通过迭代字符串并更改它们来手动转换所有搜索的字符串?

1 个答案:

答案 0 :(得分:1)

如果数据库排序规则允许,则必须编写一种方法来忽略特定字符。

如果你想忽略所有的diacrits,你必须定义自己的方法,如:

public static string RemoveDiacritics(this String s)
{
    String normalizedString = s.Normalize(NormalizationForm.FormD);
    StringBuilder stringBuilder = new StringBuilder();

    for (int i = 0; i < normalizedString.Length; i++)
    {
        Char c = normalizedString[i];
        if (System.Globalization.CharUnicodeInfo.GetUnicodeCategory(c) != System.Globalization.UnicodeCategory.NonSpacingMark)
            stringBuilder.Append(c);
    }

    return stringBuilder.ToString();
}

编辑:

public static class StringExtensions
{
    public static bool CaseContains(this string baseStr, string textToSearch, StringComparison compareMode)
    {
        return (baseStr.IndexOf(textToSearch, compareMode) != -1);
    }
}

并用

调用它
if(text.CaseContains(whattextisearch, StringComparison.CurrentCulture))
.....