名前のリストをSQL Serverテーブルにコピーしようとしていますが、そのためにEntity Frameworkプロジェクトがセットアップされています。
名前のリストに重複した値があり、いくつかの名前の末尾にスペースがあります。まだテーブルにない名前のみを挿入し、それらの末尾からスペースを削除したいと考えています。かなり単純に見えますよね?
私の解決策はこれでした:
if (!context.Names.Any(n => n.Value == nameToCopy.Trim())
context.Names.Add(nameToCopy.Trim())
注意。これは私の正確なコードではなく、単なる例なので、2 回トリミングしていることに言及する必要はありません。
驚いたことに、上記は期待どおりに機能しません。上記のステートメントをプロファイリングしているときに、if (!context.Names.Any(n => n.Value == nameToCopy.Trim())
実際には nameToCopy のトリミングされたバージョンを照会しないことがわかりました。照会された名前のいくつかは、末尾にスペースがありました。
ただし、代わりに以下を実行すると、期待どおりに機能します。
string trimmedName = nameToCopy.Trim()
if (!context.Names.Any(n => n.Value == trimmedName)
context.Names.Add(trimmedName)
最初のソリューションがデータベースクエリで文字列のトリミングされたバージョンを使用しない理由を誰か説明できますか?
ありがとう