This LINQ statement:
var entities = SomeEntities.Where(se => se.SomeProperty == "SomeValue");
var stringList = new List<string> { "string1", "string2", "string3" }
var startsWith = stringList.Select(x => x + "%");
entities = entities.Where(e => startsWith.Any(sw => DbFunctions.Like(e.StringProperty, sw))).Select(e => e.Id);
Results in a similar SQL query like this:
SELECT
[Project8].[Id] AS [Id]
FROM ( SELECT
[Extent1].[Id] AS [Id],
FROM [SomeEntities] AS [Extent1]
WHERE ([Extent1].[SomeProperty] == 'SomeValue') AND( EXISTS (SELECT
1 AS [C1]
FROM (SELECT
N'string1%' AS [C1]
FROM ( SELECT 1 AS X ) AS [SingleRowTable1]
UNION ALL
SELECT
N'string2%' AS [C1]
FROM ( SELECT 1 AS X ) AS [SingleRowTable2]
UNION ALL
SELECT
N'string3%' AS [C1]
FROM ( SELECT 1 AS X ) AS [SingleRowTable3]) AS [UnionAll2]
WHERE [Extent1].[StringProperty] LIKE [UnionAll2].[C1]
)))
) AS [Project8]
ORDER BY [Project8].[Status] DESC
How can I achieve a query similar to:
SELECT [Id]
FROM [SomeEntities]
WHERE [SomeProperty] == 'SomeValue'
AND (StringProperty] LIKE 'string1%'
OR StringProperty] LIKE 'string2%'
OR StringProperty] LIKE 'string3%')