为什么实体框架会生成两个“ ORDER BY”子句?

时间:2018-10-02 13:29:17

标签: c# oracle entity-framework

我的桌子:

CREATE TABLE "ADMIN"."TABLETEST" 
(   
    "ID" NUMBER NOT NULL ENABLE, 
    "NOTE" NUMBER
) 

我如何在实体框架中使用表格:

var s = entities.TABLETESTs.OrderByDescending(r => r.NOTE).Skip(10).Take(10);

以此生成的请求:

SELECT * 
FROM 
    (SELECT 
         "Extent1"."ID" AS "ID", 
         "Extent1"."NOTE" AS "NOTE"
     FROM 
         (SELECT 
              "Extent1"."ID" AS "ID", 
              "Extent1"."NOTE" AS "NOTE",  
              ROW_NUMBER() OVER (ORDER BY "Extent1"."NOTE" DESC) AS "row_number"
          FROM 
              (SELECT 
                   "TABLETEST"."ID" AS "ID", 
                   "TABLETEST"."NOTE" AS "NOTE"
               FROM 
                   "ADMIN"."TABLETEST" "TABLETEST") "Extent1"
          )  "Extent1"
    WHERE 
        ("Extent1"."row_number" > 10)
    ORDER BY 
        "Extent1"."NOTE" DESC
)
WHERE 
    (ROWNUM <= (10) )

如果您阅读了最后一个请求,您会发现它包含两个ORDER BY "Extent1"."NOTE" DESC;为什么实体框架会生成两个“ order by”子句,这是否必要?因为如果我省略第二个“ order by”,我的请求会变得更快,并且得到与两个“ order by”相同的结果

0 个答案:

没有答案