Запрос Linq для автозаполнения совпадений с несколькими столбцами C #

Я реализую функцию поиска на своем сайте блога, каждый блог может содержать заголовок, заголовок, контент публикации и т. Д., Которые должны работать следующим образом:

Цель

Когда пользователь вводит ключевое слово, он должен эффективно искать эту строку, содержащуюся в любом из 3 столбцов на сервере Sql.

Источник вдохновения

Источник

Что я использую

 db.postTBs.Where(a => a.isApproved == true && a.isShow == true && a.pageKeyword.Contains(query) || a.pageDescribtion.Contains(query) || a.pageTitle.Contains(query) || a.postContent.Contains(query)).Select(a => a.title).ToList();

но я знаю, что это не лучший способ получить результат. Этот запрос выполняет поиск до определенной длины строки из этих 3 столбцов, но когда у меня есть длинная строка, например

Покупайте только у надежных дилеров. Любой уважаемый дилер будет покупать только напрямую у компании или у проверенного дистрибьютора. Уточняйте цену. Цена слишком хороша, чтобы быть правдой? Наверное, да. Хотя на этих сайтах есть много честных дилеров, продавцы Amazon и eBay являются крупнейшими виновниками продажи поддельных струн. Проверьте магазины продавца на Amazon или eBay, чтобы узнать, кто они. Если чья-то цена значительно ниже той, что вы видели, велика вероятность, что это не настоящая строка, которая продается. Также покупайте свой инструмент у надежного продавца! Многие дешевые в

и я ищу

Amazon и eBay

результат не содержит фактического сообщения

но этот соответствует

On

Я также применил Некластерный в обоих 3 столбцах

Пожалуйста, помогите, как сделать поиск эффективным и точным с помощью запроса linq c #


person TAHA SULTAN TEMURI    schedule 24.07.2018    source источник
comment
Вы пробовали это a.pageKeyword.Trim().ToLower().Contains(query.Trim().ToLower())?   -  person er-sho    schedule 24.07.2018
comment
да, но не повезло, результат не точен.   -  person TAHA SULTAN TEMURI    schedule 24.07.2018
comment
Готовы ли вы использовать для этого стороннюю библиотеку?   -  person er-sho    schedule 24.07.2018


Ответы (1)


Если вы готовы использовать стороннюю dll в своем проекте, посетите здесь

Просто скачайте пакет nuget Install-Package NinjaNye.SearchExtensions

По ссылке вы можете использовать

1) Содержит: поиск одного поискового запроса в нескольких свойствах.

var result = queryableData.Search(x => x.Property1,
                                  x => x.Property2,
                                  x => x.Property3)
                          .Containing("searchTerm");

2) ContainAll: поиск, в котором все условия поиска существуют в нескольких свойствах.

var result = queryableData.Search(x => x.Property1,
                                  x => x.Property2,
                                  x => x.Property3)
                          .ContainingAll("search", "term");

3) EqualTo: поиск, в котором любое из нескольких свойств равно одному поисковому запросу.

var result = queryableData.Search(x => x.Property1,
                                  x => x.Property2,
                                  x => x.Property3)
                          .EqualTo("searchTerm");

4) StartsWith: поиск, в котором любое из нескольких свойств начинается с одного поискового запроса.

var result = queryableData.Search(x => x.Property1,
                                  x => x.Property2,
                                  x => x.Property3)
                          .StartsWith("searchTerm");

5) EndsWith: поиск, в котором любое из нескольких свойств заканчивается одним поисковым запросом.

var result = queryableData.Search(x => x.Property1, 
                                  x => x.Property2,
                                  x => x.Property3)
                          .EndsWith("searchTerm");
person er-sho    schedule 24.07.2018
comment
Если это поможет вам, примите ответ после реализации этого кода :) - person er-sho; 24.07.2018
comment
исключение и большое спасибо, и если вам нравится вопрос, пожалуйста, проголосуйте. - person TAHA SULTAN TEMURI; 26.07.2018
comment
рад слышать, что вы избавились от своей проблемы. Проголосовал за ваш вопрос :) - person er-sho; 26.07.2018