【问题标题】:Can I make Entity Framework use sqlite's LIKE instead of instr()?我可以让实体框架使用 sqlite 的 LIKE 而不是 instr() 吗?
【发布时间】:2017-10-23 20:18:54
【问题描述】:

当前使用 .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

【问题讨论】:

    标签: entity-framework sqlite entity-framework-core sql-like case-insensitive


    【解决方案1】:

    您可以使用 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%")));
    

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      相关资源
      最近更新 更多