我可以让 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%")));
目前正在使用 .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%")));