3
我在實體框架中遇到了一些問題。我從數據庫的視圖執行一個簡單的選擇。但是,當我查看EF生成的SQL時,它使用select from執行兩次查詢。這是它應該運作的方式嗎?看起來效率很低。實體框架:查詢無故執行'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),它只會在第一個選擇上放置一個「選擇top 2000」。因此,使它選擇內部選擇的頂部2000年,這是整個表格。
對此有何看法?
Duplicate:http://stackoverflow.com/questions/2112519/linq-generating-sql-with-duplicate-nested-selects/2117487 – 2010-02-11 14:01:49