gpt4 book ai didi

c# - 如何优化此 Linq 查询以删除不必要的 SELECT Count(*)

转载 作者:行者123 更新时间:2023-11-30 18:05:05 24 4
gpt4 key购买 nike

我有三个表,实体、期间和结果。 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(*) 是从哪里来的,我怎样才能摆脱它?我不需要计算每个“期间”的“结果”,它会使查询速度降低一个数量级。

最佳答案

考虑使用 Context.LoadOptions 并将 Period 指定为 LoadWith(p => p.Results) 以预先加载带有结果的周期,而无需投影到匿名类型。

关于c# - 如何优化此 Linq 查询以删除不必要的 SELECT Count(*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5878049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com