我如何优化这个Linq查询来删除不必要的SELECT Count(*)

本文关键字:不必要 删除 SELECT Count 查询 何优化 优化 Linq | 更新日期: 2023-09-27 17:54:27

我有三个表,实体,期间和结果。Entity和Period之间是1:1的映射关系,Period和Result之间是1:Many的映射关系。

这是linq查询:

int id = 100;
DateTime start = DateTime.Now;
from p in db.Periods
where p.Entity.ObjectId == id && p.Start == start
select new { Period = p, Results = p.Results })

生成的SQL的相关部分:

SELECT [t0].[EntityId], [t2].[PeriodId], [t2].[Value], (
    SELECT COUNT(*)
    FROM [dbo].[Result] AS [t3]
    WHERE [t3].[PeriodId] = [t0].[Id]
    ) AS [value2]
FROM [dbo].[Period] AS [t0]
INNER JOIN [dbo].[Entity] AS [t1] ON [t1].[Id] = [t0].[EntityId]
LEFT OUTER JOIN [dbo].[Result] AS [t2] ON [t2].[PeriodId] = [t0].[Id]
WHERE ([t1].[ObjectId] = 100) AND ([t0].[Start] = '2010-02-01 00:00:00')

SELECT Count(*)来自哪里,我如何摆脱它?我不需要每个"Period"的"Results"计数,这会使查询速度降低一个数量级。

我如何优化这个Linq查询来删除不必要的SELECT Count(*)

考虑使用Context。LoadOptions,并将Period指定为LoadWith(p => p. results),以便与结果一起快速加载周期,而无需投影到匿名类型