我可以使Entity Framework使用sqlite的LIKE代替instr()吗? [英] Can I make Entity Framework use sqlite's LIKE instead of instr()?

查看:69
本文介绍了我可以使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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆