C# 搜索过滤器 - 忽略特定变音符号
C# Search filters- ignore specific diacritics
我正在编写一个程序,我正在使用 LINQ 搜索 SQL 服务器数据库(尽管这可能会在某些时候发生变化)。我想为某些变音符号制作过滤器,例如搜索波浪号 ẽ 但不搜索抑扬音 ê。我看过如何忽略所有示例,但 none 说的是如何忽略特定示例。我是否只需要通过遍历字符串并更改它们来转换手动搜索的所有字符串?
如果您的数据库排序规则允许,您必须编写一个方法来忽略特定字符。
如果您想忽略所有变音符号,您必须定义自己的方法,例如:
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))
.....
我正在编写一个程序,我正在使用 LINQ 搜索 SQL 服务器数据库(尽管这可能会在某些时候发生变化)。我想为某些变音符号制作过滤器,例如搜索波浪号 ẽ 但不搜索抑扬音 ê。我看过如何忽略所有示例,但 none 说的是如何忽略特定示例。我是否只需要通过遍历字符串并更改它们来转换手动搜索的所有字符串?
如果您的数据库排序规则允许,您必须编写一个方法来忽略特定字符。
如果您想忽略所有变音符号,您必须定义自己的方法,例如:
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))
.....