在原始SQL中转换EF核心查询

时间:2020-04-09 14:04:49

标签: sql-server linq ef-core-3.1

由于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, ';'))
)

但是结果不是预期的。

0 个答案:

没有答案
相关问题