我有三张表,分别为Entity、Period和Result。Entity和Period之间是一对一的映射关系,而Period和Result之间是一对多的映射关系。
这是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”计数,这会使查询速度慢上一个数量级。
SELECT Count(*)是用来统计结果数量的函数,在这个查询中可能是用于分组或者筛选数据。如果你不需要这个统计结果,可以将其从查询中删除。
DeferredLoadingEnabled
属性或任何其他关于延迟加载的属性进行调整。无论如何,现在不支持LinqToSql。请转换到EF。 - Genius