43

我想要一个不涉及 ToUpper 或 ToLower 的问题的解决方案,就像我在下面的代码中使用的那样;

var upper = term.ToUpper();
using (var db = this.DataContext)
{
    return db.Counties.Where(x => x.CountyName.ToUpper().Contains(upper)).ToList();
}

我正在使用完整的框架,所以使用的 C# 解决方案StringComparison.CurrentCultureIgnoreCase不起作用。它确实适用于Equals,EndsWithStartsWith,但不适用于Contains

4

3 回答 3

8

我使用 EF6 和 Sql Server,并且在我的情况下Contains映射到LIKE '%@p0%'不区分大小写的服务器。所以在我的情况下:

db.Counties.Where(x => x.CountyName.Contains(term)).ToList();

根据需要工作。Sjoerd 答案中的更多信息。

于 2015-07-02T15:18:54.450 回答
7

我知道这与 EF 没有直接关系,但我能想到的唯一解决方案是将 DB 表列排序规则更改为不区分大小写,例如:

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
于 2015-09-06T20:20:31.747 回答
4

只需.ToLower()upper

 using (var db = this.DataContext)
            {
                return db.Counties
                       .Where(x => x
                       .CountyName.ToLower()
                       .Contains(upper.ToLower())).ToList();
            }
于 2013-01-18T14:22:02.793 回答