Вопрос

Я пытаюсь реализовать очень простой поиск по ключевым словам в приложении с использованием linq-to-sql.Мои условия поиска представлены в виде массива строк, каждый элемент массива представляет собой одно слово, и я хотел бы найти строки, содержащие условия поиска.Я не возражаю, если они содержат больше, чем просто поисковые запросы (скорее всего, они будут), но все поисковые запросы должны присутствовать.

В идеале мне нужно что-то похожее на фрагмент ниже, но я знаю, что это не сработает.Кроме того, я рассмотрел этот вопрос здесь ,но автор этого вопроса, кажется, согласен поступить наоборот (query.Contains(part.partName)), что для меня не работает.

родовое слово

Как я могу переписать этот запрос, чтобы он делал то, что мне нужно?

Это было полезно?

Решение

Мне грустно смотреть на другие попытки :(

родовое слово

Предположения:

  • partName выглядит так: "ABC 123 XYZ"

  • запрос: {"ABC", "123", "XY"}

Другие советы

Более простое и правильное решение (чем у леппи):

родовое слово

Это будет работать до тех пор, пока partName является строкой (или эквивалентом строки в SQL).

Важно отметить, что partName.Contains(qs) отличается от query.Contains(partName) .
С помощью partName.Contains(qs) выполняется поиск partName на предмет любого появления кода qs. Результирующий SQL будет эквивалентен (где - значение qs):

родовое слово

Также следует отметить StartsWith и EndsWith , которые похожи на Contains , но искать строку в определенном месте.

query.Contains(partName) совпадает с командой SQL in . Результирующий SQL будет эквивалентен (где - значение query[0], - значение query[1], а - последнее значение в массиве запроса):

родовое слово

Обновление:
Также важно отметить, что в ответе leppie не используются символы подстановки перед добавлением их в нравится заявление. Это не проблема с решением Contains , поскольку Linq избегает запроса перед отправкой. Экранированная версия решения SqlMethods.Like будет выглядеть так:

родовое слово

Вам не о чем беспокоиться, поскольку Linq избавится от этого за вас.

Вы можете попробовать:

родовое слово

Однако я не уверен, сможет ли LINQ to SQL преобразовать его в T-SQL.Другой вариант:

родовое слово

Это не так красиво, но должно работать.Вы получите запрос с множеством кодовых кодов в предложении where.

Вы можете написать это так

родовое слово

Использование пакета nuget NinjaNye.SearchExtension позволяет с легкостью выполнять этот поиск: родовое слово

Вы также можете искать по свойствам нескольких строк

родовое слово

Или выполните генерирующий кодовый код, который возвращает общий кодовый код, который просто включает свойство, показывающее, сколько раз появлялись поисковые запросы:

родовое слово

На странице проектов GitHub есть более подробное руководство: https://github.com/ninjanye/SearchExtensions

Надеюсь, это поможет будущим посетителям

Мне кажется, это довольно просто и работает для меня:

родовое слово

попробуйте это:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top