Mohan Rajesh Komatlapalli Ответов: 2

[UWP][win 10 phone][C#]поиск в списке определенного контента независимо от того, чувствителен он к регистру или нет


Всем привет,
В моем приложении у меня есть функция поиска, и я реализовал ее, как показано ниже

placelist = placelist.Where(i => i.category_name.Contains(postData)).Union(placelist.Where(i => i.category_address.Contains(postData))).Union(placelist.Where(i => i.category_tags.Contains(postData))).ToList();


eventlist = eventlist.Where(i => i.event_name.Contains(searchconte)).Union(eventlist.Where(i=>i.event_location.Contains(searchconte))).ToList();


indexlist = indexlist.Where(i => i.restaurant_location.Contains(searchtext)).Union(indexlist.Where(i => i.restaurant_name.Contains(searchtext))).Union(indexlist.Where(i=>i.cuisine_type.Contains(searchtext))).Union(indexlist.Where(i=>i.special_dishes.Contains(searchtext))).ToList();


когда я ввожу postData как "bamb", он ничего не возвращает, но когда я ввожу то же самое, что и" Bamb", он показывает результаты.

Он ищет только с учетом регистра, я хочу изменить это утверждение таким образом, чтобы оно должно было искать и возвращать содержимое независимо от того, чувствительно оно к регистру или нет, а также для содержимого с coma (,) двоеточием (:), кавычками("",")

Как я могу изменить оператор, чтобы получить вышеупомянутую функциональность?

Что я уже пробовал:

placelist = placelist.Where(i => i.category_name.Contains(postData)).Union(placelist.Where(i => i.category_address.Contains(postData))).Union(placelist.Where(i => i.category_tags.Contains(postData))).ToList();


eventlist = eventlist.Where(i => i.event_name.Contains(searchconte)).Union(eventlist.Where(i=>i.event_location.Contains(searchconte))).ToList();


indexlist = indexlist.Where(i => i.restaurant_location.Contains(searchtext)).Union(indexlist.Where(i => i.restaurant_name.Contains(searchtext))).Union(indexlist.Where(i=>i.cuisine_type.Contains(searchtext))).Union(indexlist.Where(i=>i.special_dishes.Contains(searchtext))).ToList();

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
когда я ввожу postData как "bamb", он ничего не возвращает, но когда я ввожу то же самое, что и" Bamb", он показывает результаты.

Задача довольно классическая и легко решаемая.
У вас есть некоторые данные (что бы это ни была за организация).
Из соображений производительности вы проиндексировали данные с некоторыми парами (ключ, позиция).
Хитрость заключается в том, чтобы индексировать в верхнем регистре (ключ) и выполнять все поиски в верхнем регистре(искомый ключ). Он также работает со строчными буквами (), если то же самое делается при индексации и поиске.


Mohan Rajesh Komatlapalli

Привет, @г-н ppolymorphe ,
Не могли бы вы, пожалуйста, изменить вышеприведенные фрагменты кода, как вы сказали, Я пытаюсь это сделать, но это не сработало для меня.

Рейтинг:
11

Mohan Rajesh Komatlapalli

Я изменил код, как показано ниже, из StackOverflow

indexlist = (from item in indexlist
                          where ContainsIgnoreCase(item.restaurant_location,searchtext)
                              || ContainsIgnoreCase(item.restaurant_name, searchtext)
                              || ContainsIgnoreCase(item.cuisine_type, searchtext)
                              || ContainsIgnoreCase(item.special_dishes, searchtext)
                              select item).ToList();

placelist = (from item in placelist
                                 where ContainsIgnoreCase(item.category_name, postData)
                                 || ContainsIgnoreCase(item.category_tags, postData)
                                 || ContainsIgnoreCase(item.category_address, postData)
                                 select item).ToList();


eventlist = (from item in eventlist
                                 where ContainsIgnoreCase(item.event_name, searchconte)
                                 || ContainsIgnoreCase(item.event_location, searchconte)
                                 select item).ToList();


othersList = (from item in othersList
                                  where ContainsIgnoreCase(item.category_name, PostData)
                                 || ContainsIgnoreCase(item.category_tags, PostData)
                                 || ContainsIgnoreCase(item.category_address, PostData)
                                 select item).ToList();

Эта модификация сработала для меня,
Благодарим Вас за ознакомление с моей проблемой.