LINQ Как искать значение UNICODE - PullRequest
0 голосов
/ 01 апреля 2011

Помогите мне найти значения UNICODE в LINQ, когда я пишу LINQ для поиска строки, не UNICODE, она работает нормально, но строка UNICODE, мой запрос ничего не ищет.

Menus.Where(e => e.Name.ToLower().Contains(keyword.ToLower()))
     .OrderBy(e => e.Order)
     .ThenBy(e => e.Name)
     .ToList();

Itотлично работает без строки Unicode, например

"AMERICAN BREAFAST: CHOICE OF FRIED EGG OR OMELETE SERVED WITH CRISPY BACON, SAUSAGE, SAUTEED TOMATO AND TOAST" 

, но когда я ищу строку Unicode, например

"Bữa ăn sáng kiểu Mỹ: chọn giữa trứng chiên hoặc trứng cuộn dùng kèm thịt xông khói, xúc xích, cà chua xào và bánh mì nướng" 

, она больше не работает.пожалуйста, помогите мне исправить это.Большое спасибо

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Прежде всего, указанная вами английская строка на самом деле является Unicode.

Во-вторых, у этой категории проблемы есть несколько возможных локусов для источника проблемы:

  1. Откуда происходит "ключевое слово"? Правильно ли он был преобразован из исходной кодировки в Unicode? Если данные поступили, например, из приложения ASP.Net, необходимо убедиться, что тег HTML Meta Content-Type имеет значение «text / html; charset = UTF-8» и что серверная кодировка запросов и ответов имеет вид также по умолчанию UTF-8. Если вы можете просмотреть эту переменную ключевое слово в отладчике без проблем, то вы, вероятно, в порядке.
  2. Какой тип e.Name в базовом источнике данных? Если это на SQL Server, это NVARCHAR или VARCHAR? Если это VARCHAR, сопоставляет ли сопоставление подходящую кодировку, которая поддерживает вьетнамский язык?
  3. Независимо от NVARCHAR или VARCHAR, базовое сопоставление также подразумевает правила учета регистра. Если в вашем поле используется сортировка с учетом регистра, ваш вызов toLower может привести к неожиданным результатам, поскольку он не будет соответствовать правилам сортировки в базе данных. Кроме того, поле сортировки указывает, являются ли сравнения чувствительными к ударению или нечувствительными к ударению, что может повлиять на ваши результаты.
  4. При некоторых обстоятельствах форма нормализации Unicode может повлиять на ваши результаты. Поскольку вьетнамский язык может быть представлен составными символами или разложенными буквами + диакритическими кодами, вы должны убедиться, что ваша нормализация соответствует. Например, в зависимости от ваших предпочтений вам может потребоваться кодировать в Unicode-формате kC или kD, но вы должны делать это последовательно.
0 голосов
/ 01 апреля 2011

Мне не удалось воспроизвести вашу проблему, однако возможно, что, поскольку string.Contains использует порядковый язык культуры для сравнения, некоторые символы неправильно соответствуют. Вы можете изменить условие where на Where(e => e.IndexOf(keyword,StringComparison.CurrentCultureIgnoreCase)>=0), чтобы избежать проблем с культурой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...