У меня есть некоторые проблемы со структурой сущностей. Я выполняю простой выбор из представления в базе данных. Однако когда я просматриваю SQL, который генерирует EF, он выполняет запрос дважды, используя select from. Это так, как это должно работать? Это кажется очень неэффективным.
var reads = (from rt in ctx.C2kReadsToTransfer
where rt.ReadDt > fromDate
&& rt.ReadDt < toDate
select rt);
Это переводится на следующий SQL
SELECT
[Extent1].[AMRID] AS [AMRID]
, [Extent1].[Comments] AS [Comments]
, [Extent1].[ExternalSystemType] AS [ExternalSystemType]
, [Extent1].[LastReadDt] AS [LastReadDt]
, [Extent1].[ReadDt] AS [ReadDt]
, [Extent1].[Reading] AS [Reading]
, [Extent1].[Units] AS [Units]
, [Extent1].[Transferred] AS [Transferred]
FROM
(SELECT
[ReadsToTransfer].[AMRID] AS [AMRID]
, [ReadsToTransfer].[Comments] AS [Comments]
, [ReadsToTransfer].[ExternalSystemType] AS [ExternalSystemType]
, [ReadsToTransfer].[LastReadDt] AS [LastReadDt]
, [ReadsToTransfer].[ReadDt] AS [ReadDt]
, [ReadsToTransfer].[Reading] AS [Reading]
, [ReadsToTransfer].[Transferred] AS [Transferred]
, [ReadsToTransfer].[Units] AS [Units]
FROM [dbo].[ReadsToTransfer] AS [ReadsToTransfer])
AS [Extent1]
Это кажется очень неэффективным, особенно когда таблица содержит около 250 миллионов строк, как у нас. Кроме того, если я добавляю .Take (2000) в конец кода, он просто помещает «верхний выбор 2000» только в первый выбор. Таким образом, заставляя его выбрать верхнюю часть 2000 внутреннего выбора, который является всей таблицей.
Есть мысли по этому поводу?