3 Stimmen

Wie kann ich diese Linq-Abfrage optimieren, um das unnötige SELECT Count(*) zu entfernen?

Ich habe drei Tabellen: Entität, Zeitraum und Ergebnis. Es gibt eine 1:1-Zuordnung zwischen Entity und Period und eine 1:Many-Zuordnung zwischen Period und Result.

Dies ist die Linq-Abfrage:

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 })

Dies sind die relevanten Teile des generierten 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')

Woher kommt das SELECT Count(*) und wie kann ich es loswerden? Ich benötige keine Zählung der "Ergebnisse" für jeden "Zeitraum", und sie verlangsamt die Abfrage um eine Größenordnung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X