我有一个带有 char(1) 状态列的旧数据库。我使用代码优先和实体框架 4.3.1 与我的数据库进行交互。我的代码第一类中的状态列定义如下:
[Column(TypeName = "char")]
public string Status { get; set; }
我正在编写一个 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'))
似乎是因为它将 unicode 与非 unicode 进行比较,所以它不能使用 Status 列上的索引。
我之前在其他 linq 查询中也遇到过类似的问题,但我认为通过将 [Column(TypeName = "char")] 放在属性上来解决它们。
有谁知道我如何防止 SQL 将这些 N 放在我所有状态值的前面?我尝试将 statusList 设为 char 列表,但随后我需要先将 Status 列的定义更改为代码中的 char,但这会引发错误。
谢谢大卫