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、では機能しません。EndsWithStartsWithContains

4

3 に答える 3

8

私はEF6とSql Serverを使用しており、私の場合は大文字と小文字を区別しないようにContainsマッピングされています。LIKE '%@p0%'だから私の場合:

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

必要に応じて機能します。Sjoerd answerの詳細情報。

于 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 に答える