[解決済み] LINQ-to-SQLでの大文字小文字を区別しない文字列比較
質問
大文字小文字を区別しない文字列比較を行うために ToUpper と ToLower を使用することは賢明でないと読んだことがありますが、LINQ-to-SQL に関しては代替手段が見当たりません。String.Compare の ignoreCase と CompareOptions 引数は LINQ-to-SQL では無視されます(大文字小文字を区別するデータベースを使用している場合、大文字小文字を区別しない比較を要求しても、大文字小文字を区別する比較が実行されます)。 ここでは、ToLowerとToUpperのどちらが最適なのでしょうか? どちらか一方が優れているのでしょうか? どこかでToUpperの方が良いと読んだ気がするのですが、ここでそれが当てはまるかどうかはわかりません。 (私は多くのコードレビューを行っており、誰もがToLowerを使用しています)。
Dim s = From row In context.Table Where String.Compare(row.Name, "test", StringComparison.InvariantCultureIgnoreCase) = 0
これは、単に row.Name と "test" を比較する SQL クエリに変換され、大文字と小文字を区別するデータベースでは "Test" と "TEST" を返すことはありません。
どのように解決するのですか?
おっしゃるとおり、ToUpper と ToLower には重要な違いがあり、大文字小文字を区別しない等値チェックを行おうとすると、どちらか一方だけが確実に正しいのです。
理想的には、大文字小文字を区別しない等値チェックを行うための最良の方法は は :
String.Equals(row.Name, "test", StringComparison.OrdinalIgnoreCase)
ただし
これは
は機能しません。
になります。したがって、私たちは
ToUpper
または
ToLower
.
に注意してください。 序数 IgnoreCase を使ってセキュリティセーフにしています。 しかし、正確にどのような種類の大文字小文字を区別するチェックを行うかは、あなたの目的が何であるかに依存します。 しかし、一般的には、等号チェックにはEqualsを使い、ソートするときにはCompareを使い、そして仕事に適したStringComparisonを選びます。
Michael Kaplan (文化とこのような文字処理の権威) は、ToUpper 対 ToLower について関連した投稿をしています。
彼は "String.ToUpper-と言っています。 ToLowerではなくToUpperを使用し、OSのケーシング規則を拾うためにInvariantCultureを指定する。 "。
関連
-
[解決済み] VB.NETでプログラムパスを取得する?
-
[解決済み] LINQを使用してList<T>から要素を削除する
-
[解決済み] リファレンスの追加にSystem.Web.Mvcが表示されないのはなぜですか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] LINQのGroup by
-
[解決済み] DataTableに対するLINQクエリ
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] LINQ集計アルゴリズム説明
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】WCFとは何か、何ができるのか?
-
[解決済み】XAMLにSystem.Stringを埋め込む
-
[解決済み] [Solved] ファイル *.mdf をデータベースとしてアタッチできない
-
[解決済み] CLSID {XXXX} を持つコンポーネントの COM クラスファクトリの取得は、次のエラーにより失敗しました: 80040154。
-
[解決済み] Microsoft.Practices.ServiceLocationはどこから来たのですか?
-
[解決済み] WPFで角丸ボタンを作成する/作るには?
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] app.configが作成されるタイミングとapp.exe.configが作成されるタイミング、その違いとは?
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?
-
[解決済み] RelativeSourceでWPFバインディングを使用するにはどうしたらいいですか?