私はucommerce製品からキー(製品)を検索する必要があります。ここでLINQループの文字列からアクセントを削除する - Ucommerce製品
はコードです -
string whatToSearch = "L'oreal";
var normalizedText = whatToSearch.Normalize(NormalizationForm.FormD);
whatToSearch = nonSpacingMarkRegex.Replace(normalizedText, string.Empty);
whatToSearch = Regex.Replace(whatToSearch, @"[^0-9a-zA-Z ]+", "");
var products = new List<UCommerce.EntitiesV2.Product>();
if (!string.IsNullOrWhiteSpace(whatToSearch))
{
products = UCommerce.EntitiesV2.Product.Find(p =>
p.VariantSku == null && p.DisplayOnSite &&
(
p.Sku.Contains(whatToSearch)
|| p.Name.RemoveDiacritics().Contains(whatToSearch)
|| p.ProductDescriptions.Any(
d => d.DisplayName.Contains(whatToSearch)
|| d.ShortDescription.Contains(whatToSearch)
|| d.LongDescription.Contains(whatToSearch)
)
)
);
}
var productIds = products.Select(x => x.Id).ToList();
そして、これは私がループ内で使用しています拡張メソッドです。
public static string RemoveDiacritics(this string s)
{
var normalizedString = s.Normalize(NormalizationForm.FormD);
var stringBuilder = new StringBuilder();
foreach (var c in normalizedString)
{
if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
stringBuilder.Append(c);
}
return stringBuilder.ToString();
}
誰でも助けることができる私は、この例外にSystem.String RemoveDiacritics(System.String)
を取得しています。
おかげ
関数の名前以外に何か他のものがあるに違いありません! – TheVillageIdiot
'Regex.Replace(whatToSearch、@" [^ 0-9a-zA-Z] + "、" ");'は、ASCII桁/文字とスペース以外のすべての文字を削除しています。私はそれが期待されるかどうかわからない。しかし、結合マークだけを削除する必要がある場合は、 'Regex.Replace(whatToSearch、@" \ p {M} + "、" ");' –