我正试图通过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)