我可以让 Entity Framework 使用 sqlite 的 LIKE 而不是 instr() 吗?

Can I make Entity Framework use sqlite's LIKE instead of instr()?

目前正在使用 .NET Core 2。

我使用类似于以下的 LINQ 查询:

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

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"

通过使用 instr(),比较区分大小写,尽管 PersonAddress.Text 列设置为 COLLATE NOCASE。如果我将上面的查询修改为使用 LIKE,则搜索将不区分大小写,正如我所希望的那样。

是否可以强制 EF 使用 LIKE

您可以使用 EF Core 2.0 中引入的EF.Functions.Like

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