比较忽略大小写的字符串

时间:2015-10-29 08:13:52

标签: sqlite entity-framework-core

我试图通过Tag属性在数据库中查找实体(Name s),忽略这种情况很重要(当搜索database且数据库包含时一个名为Database的标签,应该返回一个标签。现在,我的代码看起来像这样:

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

显然,这个是区分大小写的。我试图提供StringComparer.OrdinalIgnoreCase作为Contains方法的比较器,但在执行期间得到一个警告,表达式无法翻译,并且将在代码中而不是在数据库中执行(我不是&#39 ;记住确切的消息,一旦我回到我的开发机器上,我就会编辑)。如果必须的话,我可以忍受,但是知道如何让数据库在这种情况下完成工作会很好。有可能吗?

1 个答案:

答案 0 :(得分:1)

不需要改变。 SQLite的“LIKE”已经不区分大小写了。

  

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

(cref https://www.sqlite.org/pragma.html#pragma_case_sensitive_likeCase sensitive and insensitive like in SQLite

当然,您始终可以使用.FromSql()来获取所需的确切查询。例如:

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