【发布时间】:2021-12-19 00:31:53
【问题描述】:
我正在努力使用 Entity Framework Core 提高后端性能。这是一个小而简单的例子来说明我想要返回的内容:
var filteredMovies = _dataService
.Repository
.Where(movie => movie.Genre == 'Drama')
.Where(...many other conditions, joins, etc...);
var counts1 = filteredMovies.Count(movie => movie.director == 'Spielberg');
var counts2 = filteredMovies.Count(movie => movie.director == 'Nolan');
return new Summary
{
SpielbergCount = counts1,
NolanCount = counts2,
};
这将生成 2 个 SQL 查询,每个查询都经过所有 WHERE、JOIN 步骤。 我在 SQL 中看到的是,我可以这样写,只执行 1 个查询:
SELECT
SUM(CASE WHEN Director = 'Spielberg' THEN 1 ELSE 0 END) SpielbergCount,
SUM(CASE WHEN Director = 'Nolan' THEN 1 ELSE 0 END) NolanCount
FROM Movies
JOIN ....
WHERE ....
2 个问题:
- 如何将最后一个查询转换为 EntityFramework,以防止执行 2 个不同的 SQL 查询?
- 它会提高性能吗? (即:这是一个小例子,但我有很多查询需要改进,其中一些非常大,大多数查询是相同的,除了一个条件,如本例中的 Director)或者它实际上没有改进有什么?
谢谢
【问题讨论】:
-
基本上你必须做一个
GroupBy,你在一个常数值上分组,这样你就可以在你的Select中做不同的总和。
标签: c# sql performance entity-framework entity-framework-core