char(1) Status 列を持つ古いデータベースがあります。コードを最初に使用し、エンティティ フレームワーク 4.3.1 を使用してデータベースとやり取りしています。私のコードの最初のクラスのステータス列は次のように定義されています。
[Column(TypeName = "char")]
public string Status { get; set; }
Status がいくつかの値のいずれかであるすべてのアイテムを取得するための linq クエリを作成しています。コードは次のようになります (簡略化されています)。
List<string> statusList = new List<string>() {"N","H","P"};
...
var entries = (from t in context.MyTable where statusList.Conains(t.Status)).ToList();
...
生成された SQL は、すべての Status 値の前に N を付けて、クエリを非常に遅くします。
WHERE ([Extent1].[Status] IN (N'N', N'P', N'P'))
ユニコードと非ユニコードを比較しているため、ステータス列のインデックスを使用できないようです。
他のlinqクエリでも同様の問題が発生したことがありますが、プロパティに [Column(TypeName = "char")] を配置することで解決したと思いました。
SQL がすべての Status 値の前にこれらの N を置かないようにする方法を知っている人はいますか? statusList を char のリストにしようとしましたが、最初にコードで Status 列の定義を char に変更する必要がありましたが、エラーがスローされました。
ありがとうデビッド