Использование contains () в LINQ to SQL
-
24-09-2019 - |
Вопрос
Я пытаюсь реализовать очень простой поиск по ключевым словам в приложении с использованием 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
Надеюсь, это поможет будущим посетителям
Мне кажется, это довольно просто и работает для меня:
родовое словопопробуйте это:
родовое слово