忽略大小写比较字符串



我正试图通过Name属性在数据库中查找实体(Tag s),其中忽略大小写很重要(当搜索database并且数据库包含名为Database的标记时,应返回该标记)。现在,我的代码是这样的:

public IEnumerable<db.Tag> FindByNames(IEnumerable<string> tagNames)
{
    return this.DatabaseContext.Tags
        .Where(tag => tagNames.Contains(tag.Name));
}

显然,这个是区分大小写的。我曾尝试提供StringComparer.OrdinalIgnoreCase作为Contains方法的比较器,但在执行过程中收到警告,该表达式无法翻译,将在代码中而不是在数据库中执行(我不记得确切的消息,我一回到开发机器就会编辑)。如果必须的话,我可以接受,但如果知道如何让数据库在这种情况下完成工作,那就太好了。有可能吗?

不需要进行任何更改。SQLite的"LIKE"已经不区分大小写了。

LIKE运算符的默认行为是忽略ASCII字符的大小写。

(crefhttps://www.sqlite.org/pragma.html#pragma_case_sensitive_like以及像SQLite中那样区分大小写和不区分大小写)

当然,您总是可以使用.FromSql()来获得您想要的确切查询。示例:

context.Tags.FromSql("SELECT * FROM tags WHERE name LIKE '%{0}%'", tagName)

最新更新