2012-10-02 13 views
5

No es un simple LINQ a EF:¿Por qué EF genera una subconsulta para una consulta simle?

var query = from p in _db.Posts 
      where p.BlogtId == blogId 
      select p; 

Se genera SQL en esta forma:

SELECT 
`Extent1`.`PostId`, 
`Extent1`.`BlogId`, 
... 
FROM `Posts` AS `Extent1` 
WHERE `Extent1`.`BlogId` = @p__linq__0 

Pero cuando agrego una orden por la que esta consulta

var query = from p in _db.Posts 
      where p.BlogId == blogId 
      orderby p.PublishDate 
      select p; 

Genera esta consulta

SELECT 
`Project1`.`PostId`, 
`Project1`.`BlogId`, 
... 
FROM (SELECT 
`Extent1`.`PostId`, 
`Extent1`.`BlogId`, 
... 
FROM `Posts` AS `Extent1` 
WHERE `Extent1`.`BlogId` = @p__linq__0) AS `Project1` 
ORDER BY 
`Project1`.`PublishDate` ASC 

¿Por qué esto genera una subconsulta? Hay un problema de rendimiento para esta consulta en MySQL. MySQL está intentando ejecutar la consulta interna que retira todos los registros en la base de datos y luego trata de ordenar el tema.

Necesito una solución para generar a continuación sql por LINQ

SELECT 
`Extent1`.`PostId`, 
... 
FROM `Posts` AS `Extent1` 
WHERE `Extent1`.`BlogId` = @p__linq__0 
ORDER BY 
`Extent1`.`PublishDate` ASC 
+0

Qué diferencia hace para usted? – podiluska

+0

@podiluska Hay un problema de rendimiento para esta consulta en MySQL. MySQL está intentando ejecutar la consulta interna que retira todos los registros en la base de datos y luego trata de ordenar el tema. –

+5

¿Por qué los retiraría a todos, están filtrados? – podiluska

Respuesta

5

Esto no es un problema de entidad-marco, a pesar de lo que su enlace podría decir a los demás. Está relacionado con MySqlConnector/net. ¡Puedo probarlo! Ah, no esperaba eso eh.

Enganche este escenario exacto utilizando una base de datos MSSQL, con el conector System.Data, y verá SQL correctamente formado. Este es un problema con las proyecciones dentro de MySqlConnector. Si quiere arreglarlo, entre y edítelo usted mismo.

Aquí es cómo tener una copia editada localmente de MySqlConnector/Neto: How to customize MySql Connector/net?

Cuestiones relacionadas