Из-за ограничений EF Core 3.x мне нужно преобразовать запрос LINQ в raw SQL.
Таблица выглядит так:
Id Name TagList
----------------------------
1 Line1 1;5;8
2 Line2 1;4
3 Line3 5
4 Line4 3;2;8
5 Line5
6 Line6 4
Мне нужно получить строки который соответствует предоставленному списку тегов, имеет параметр: давайте назовем его tagSearch. EF-запрос, который я использовал с EF Core 2.x, имеет метод Any () и Contains ():
var result= _myRepository.Where(a => a.TagList.Any(t => tagSearch.Contains(t)))
, если tagSearch - это List<string>
, который содержит следующие элементы: 1 | 2
Результат:
Id Name TagList
----------------------------
1 Line1 1;5;8
2 Line2 1;4
4 Line4 3;2;8
Я пробовал несколько SQL запросов со STRING_SPLIT, и самый близкий:
DECLARE @tagSearch NVARCHAR(400) = '1;2'
SELECT *
FROM MyTable
WHERE ( @tagSearch = SOME (SELECT value FROM STRING_SPLIT(TagList, ';'))
or TagList = SOME (SELECT value FROM STRING_SPLIT(@tagSearch, ';'))
)
Но результат не ожидаемый.