Я пытаюсь оптимизировать запрос, сгенерированный с помощью Entity Framework Linq to SQL Query. Ниже приведена упрощенная версия моего запроса.Entity Framework Optimize Count Child Entities
C#
List<bool> isUsed = Context.tParent.Select(parent =>
parent.tChild.Any()
).ToList();
Это приводит следующий SQL
генерируемый SQL
SELECT
CASE WHEN ((EXISTS (SELECT
1 AS [C1]
FROM [dbo].[tChild] AS [Extent2]
WHERE [Extent1].[Id] = [Extent2].[ParentId]
))
) THEN cast(1 as bit) ELSE cast(0 as bit) END AS [C1]
FROM [dbo].[tParent] AS [Extent1]
К сожалению, это работает плохо (мой реальный запрос проверяет количество на многих связанных таблиц), и если я переписываю запрос, как указано ниже, скорость очень велика reased.
Оптимизированного запрос
SELECT CASE WHEN (
COUNT(tChild.Id) > 0
) THEN 1 ELSE 0 END
FROM tParent
LEFT JOIN tChild ON tParent.Id = tChild.ParentId
GROUP BY tParent.Id
Как я могу переписать мои C# для создания моего оптимизированного запроса, используя Linq для SQL запроса?
Я согласен, что это не лучший способ описать намерение запроса, но это исполнение, которое для моей текущей задачи это более важно. благодаря – Joe