我正在使用 LINQ To Sql(不是实体框架)、System.Data.Linq.DataContext 库、访问 SQL Server 2005 数据库并使用 .Net Framework 4。
表 dbo.Dogs 有一个 CHAR(1) NULL 类型的“Active”列。如果我直接编写 SQL,则查询将是:
SELECT * FROM dbo.Dogs where Active = 'A';
LINQ 查询是这样的:
from d in myDataContext.Dogs where d.Active == 'A' select d;
从上述 LINQ 查询生成的 SQL 将 Active 字段转换为 UNICODE。这意味着我不能使用 dbo.Dogs.Active 列上的索引,从而显着降低查询速度:
SELECT [t0].Name, [t0].Active
FROM [dbo].[Dog] AS [t0]
WHERE UNICODE([t0].[Active]) = @p1
我可以做些什么来阻止 Linq to Sql 插入该 UNICODE() 调用(从而失去我对 dogs.Active 的索引的好处)?我尝试使用 EntityFunctions.AsNonUnicode() 方法包装参数,但这没有用(它在生成的 sql 中将 CONVERT() 插入到 NVARCHAR 而不是 UNICODE() ),例如:
...where d.Active.ToString() == EntityFunctions.AsNonUnicode('A'.ToString());