我可以让实体框架使用sqlite的LIKE而不是instr()吗?

Geo*_*e T 1 sqlite entity-framework case-insensitive sql-like entity-framework-core

目前使用的是.NET Core 2.

我使用LINQ查询类似于:

var peopleInRoseStreet = context.Person
    .Include(p => p.Addresses)
    .Where(p => p.Addresses.Any(a => a.Text.Contains("rose")));
Run Code Online (Sandbox Code Playgroud)

EF似乎将此转换为:

SELECT "p".*
FROM "Person" AS "p"
WHERE EXISTS (
    SELECT 1
    FROM "PersonAddress" AS "a"
    WHERE (instr("a"."Text", 'rose') > 0) AND ("p"."Id" = "a"."person_id"))
ORDER BY "p"."Id"
Run Code Online (Sandbox Code Playgroud)

通过使用instr(),虽然PersonAddress.Text列设置为,但比较区分大小写COLLATE NOCASE.如果我修改上面的查询来LIKE代替使用,那么搜索就像我想要的那样不区分大小写.

是否可以强制使用EF LIKE

Iva*_*oev 5

您可以使用EF.Functions.LikeEF Core 2.0中的介绍:

var peopleInRoseStreet = context.Person
    .Include(p => p.Addresses)
    .Where(p => p.Addresses.Any(a => EF.Functions.Like(a.Text, "%rose%")));
Run Code Online (Sandbox Code Playgroud)