我试图通过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 ;记住确切的消息,一旦我回到我的开发机器上,我就会编辑)。如果必须的话,我可以忍受,但是知道如何让数据库在这种情况下完成工作会很好。有可能吗?
答案 0 :(得分:1)
不需要改变。 SQLite的“LIKE”已经不区分大小写了。
LIKE运算符的默认行为是忽略ASCII字符的大小写。
(cref https://www.sqlite.org/pragma.html#pragma_case_sensitive_like和Case sensitive and insensitive like in SQLite)
当然,您始终可以使用.FromSql()
来获取所需的确切查询。例如:
context.Tags.FromSql("SELECT * FROM tags WHERE name LIKE '%{0}%'", tagName)