我可以使Entity Framework使用sqlite的LIKE代替instr()吗? [英] Can I make Entity Framework use sqlite's LIKE instead of instr()?
本文介绍了我可以使Entity Framework使用sqlite的LIKE代替instr()吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当前使用.NET Core 2。
Currently using .NET Core 2.
我使用类似于以下内容的LINQ查询:
I use a LINQ query similar to:
var peopleInRoseStreet = context.Person
.Include(p => p.Addresses)
.Where(p => p.Addresses.Any(a => a.Text.Contains("rose")));
EF似乎将其翻译为:
EF seems to translate this to:
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
,则搜索按我的意图是不区分大小写的。
By using instr()
, the comparison is case-sensitive although the PersonAddress.Text column is set to COLLATE NOCASE
. If I modify the query above to use LIKE
instead, the search is case-insensitive as I intend it.
是否可以强制EF使用 Like
?
Is it possible to force EF to use LIKE
?
推荐答案
使用 EF.Functions.Like
:
var peopleInRoseStreet = context.Person
.Include(p => p.Addresses)
.Where(p => p.Addresses.Any(a => EF.Functions.Like(a.Text, "%rose%")));
这篇关于我可以使Entity Framework使用sqlite的LIKE代替instr()吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文