【发布时间】:2017-01-18 04:18:29
【问题描述】:
我有以下 linq 查询
internal List<ZipCodeInfo> GetInfoFromZipCode(string zipCode)
{
using (DbContext context = new DbContext())
{
IQueryable<ZipCodeInfo> results;
results = (from a in context.Address
where a.ZipCode.Equals(zipCode)
select new ZipCodeInfo
{
Field1 = a.Field1,
Field2 = a.Field2,
Field3 = a.Field3
});
return results.ToList();
}
}
但查询本身大约需要 5-6 秒才能完成。我已经在 SQL 上执行了对应的查询,几乎不需要完成任何事情。为什么要花这么长时间?最后的查询只返回 4 个匹配项,所以这里没有太多可做的..
此查询是 Controller 类的一部分,我正在使用 ASP.NET Core 和 EntityFramework Core。
SQL 查询看起来像这样,顺便说一句。
SELECT *
FROM Address
WHERE ZipCode = '29130'
【问题讨论】:
-
原因是有时 L2S 或实体框架不会发出优化查询。执行路径并不总是很好。您的替代方法是创建一个存储过程并使用实体框架调用它。如果您需要完整的解决方案,请告诉我。
-
您的意思是数据库中的存储过程?不幸的是,我无法控制数据库,只能读取运行查询的权限,并且不能选择添加存储过程。知道是否有其他方法吗?也许我需要摆脱 EF 并使用常规 SQL 连接?
-
原因很简单,因为它需要时间。每次调用函数 EF 都会创建 SQL 脚本并进行编译。所以总是需要时间。让我想一个替代方案。但与此同时,你能不能只用 ADO 来实现这个功能?
-
ZipCode 是 nvarchar 还是 varchar?
-
数据库已将 ZipCode 定义为 varchar
标签: asp.net-mvc entity-framework linq asp.net-core entity-framework-core