字符串 Text.ToUpper() 在 C# Visual Studio 2017 ver 15.1.1 中的 Lin



>我有以下代码需要 5-8 秒才能完成:

recent_items returnedData = (from d in db.recent_items
where d.item_number == scannerInput.Text.ToUpper()
select d).FirstOrDefault();

其中,以下内容在不到半秒的时间内执行:

string search = scannerInput.Text.ToUpper();
recent_items returnedData = (from d in db.recent_items
where d.item_number == search
select d).FirstOrDefault();

这到底是怎么回事?

差异的最可能原因是 EF 在从 RDBMS 检索所有行后计算内存中的第一个条件。

Microsoft文档对客户端与服务器评估进行了以下说明:

实体框架核心支持在客户端上评估查询的部分内容以及推送到数据库的部分查询。由数据库提供程序确定将在数据库中评估查询的哪些部分。

EF DB 提供程序无法将scannerInput.Text.ToUpper()发送到 RDBMS 进行评估,因此在从数据库中检索数据行后,它会在内存中执行所有比较。此决定是正确的,因为 EF DB 提供程序不能假定上述表达式的连续计算将产生相同的结果。

另一方面,第二个查询使用捕获的变量进行查询。在 EF 运行查询时,该变量的值保证保持不变,因此它继续在 RDBMS 端评估请求。

相关内容

最新更新