我想要一个不涉及ToUpper或ToLower的问题的解决方案,正如我在下面的代码中使用的那样;
var upper = term.ToUpper();
using (var db = this.DataContext)
{
return db.Counties.Where(x => x.CountyName.ToUpper().Contains(upper)).ToList();
}
我正在使用授权框架,因此使用StringComparison.CurrentCultureIgnoreCase
的C#解决方案不起作用。它适用于Equals
,EndsWith
和StartsWith
,但不适用于Contains
。
答案 0 :(得分:6)
我知道这与EF没有直接关系,但只有我能想到的解决方案是将DB表格列整理改为Case Insensitive,例如:
ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME nvarchar(100) COLLATE Latin1_General_CI_AS NULL
CI - 不区分大小写/ CS - 区分大小写
AS - 重音敏感/ AI - 重音不敏感(也可能有用)
如果您无法更改表格列的排序规则,则可以使用EF直接查询并强制排序
select *
from table
where country collate Latin1_General_CI_AS != @country
答案 1 :(得分:5)
我使用EF6和Sql Server,Contains
映射到LIKE '%@p0%'
,在我的情况下不区分大小写。所以在我的情况下:
db.Counties.Where(x => x.CountyName.Contains(term)).ToList();
根据需要运作。有关Sjoerd answer的更多信息。
答案 2 :(得分:-1)
只需添加.ToLower()
upper
即可
using (var db = this.DataContext)
{
return db.Counties
.Where(x => x
.CountyName.ToLower()
.Contains(upper.ToLower())).ToList();
}