由于EF Core 3.x的限制,我需要在原始SQL中转换LINQ查询。
表格如下:
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 Core 2.x一起使用的EF查询具有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
我用STRING_SPLIT尝试了几个SQL查询,最接近的是:
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, ';'))
)
但是结果不是预期的。