我想知道是否有优化我的 LINQ 查询的好方法。我正在使用类似于以下内容的 LINQ 查询从数据库中检索数据:
// PKs is a list of integers
var import = context.table.Where(x => PKs.Contains(x.PrimaryKey)).AsEnumerable();
我假设(错误地)这将导致如下 SQL 调用:
SELECT * from table where PrimaryKey in (PK[1], PK[2], ...)
即 1 个数据库命中。使用Glimpse检查 SQL 调用,我看到 LINQ 查询被转换为许多单独的 SQL 调用,例如:
SELECT * from table where PrimaryKey=PK[1]
SELECT * from table where PrimaryKey=PK[2]
...
单个查询执行得非常快,但由于我的整数列表很大(以千计),开销造成的偏移导致查询需要大约 25 秒才能运行。
我决定通过数据库调用去除耗时的 LINQ 查询,并通过存储过程调用导入数据:
var import = this.p_import(parameter).ToList();
这极大地提高了响应时间,因为只有一个数据库调用,从大约 25 秒到不到 1 秒。
这解决了我的问题,但我使用 LINQ 的全部原因是避免使用存储过程。有没有更好的方法可以优化我的 LINQ 查询?