LinqTo实体where子句中的SQL强制转换不正确

本文关键字:转换 不正确 SQL 实体 where 子句 LinqTo | 更新日期: 2023-09-27 18:19:33

我刚刚遇到了一个关于Linq-To实体的奇怪问题。背景如下:-实体代码优先-此实体映射到SQL Server视图

在尝试诸如之类的deffered执行时

byte id = 1;
var query = myDbSet.Where(s => s.SiteId == id);
query = query.Where(s => s.Type == "Some Type");
var lst = query.ToList();

我从SQL Server得到一个超时(查询持续1分钟)。

在分析SQL查询时,我看到一个奇怪的从SiteId到int的转换,而它是tinyint。通过执行相同的查询移除强制转换,查询将持续3秒!

如何强制参数类型不进行SQL强制转换?

LinqTo实体where子句中的SQL强制转换不正确

通过以下方式更改Where子句:

var query = MyDbSet.Where( s => id.Equals(s.SiteID));

解决了问题!