5

名前のリストを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)

最初のソリューションがデータベースクエリで文字列のトリミングされたバージョンを使用しない理由を誰か説明できますか?

ありがとう

4

1 に答える 1