【问题标题】:C# Search filters- ignore specific diacriticsC# 搜索过滤器 - 忽略特定的变音符号
【发布时间】:2016-06-08 12:31:42
【问题描述】:

我正在编写一个程序,并且正在使用 LINQ 搜索 SQL Server 数据库(尽管这可能会在某些时候发生变化)。我想为某些变音符号制作过滤器,例如搜索波浪号 ẽ 但不搜索抑扬符 ê。我见过如何忽略所有的例子,但没有人说如何忽略特定的例子。我是否只需要通过遍历字符串并更改它们来转换手动搜索的所有字符串?

【问题讨论】:

  • 我会创建一个字典/查找变音符号,将其过滤并将字符串的每个字符与字典/查找进行比较。
  • 我该怎么做?
  • 没关系我误读了你的评论

标签: c# linq diacritics


【解决方案1】:

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

如果您想忽略所有变音符号,您必须定义自己的方法,例如:

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))
.....

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    相关资源
    最近更新 更多