2012-10-02 12 views
5

Istnieje proste LINQ do EF:Dlaczego EF generuje pod-zapytanie dla prostego zapytania?

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

Generuje SQL w tej formie:

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

Ale kiedy dodać zamówienie do tego zapytania

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

Generuje to zapytanie:

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 

Dlaczego generowane jest pod-zapytanie? Występuje problem z wydajnością dla tego zapytania w MySQL. MySQL próbuje wykonać zapytanie wewnętrzne, które ściąga wszystkie rekordy w bazie danych, a następnie próbuje posortować motyw.

muszę rozwiązanie do generowania poniżej sql przez LINQ

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

Co to za różnica dla Ciebie? – podiluska

+0

@podiluska Występuje problem z wydajnością dla tego zapytania w MySQL. MySQL próbuje wykonać zapytanie wewnętrzne, które ściąga wszystkie rekordy w bazie danych, a następnie próbuje posortować motyw. –

+5

Dlaczego miałoby to przyciągnąć ich wszystkich - są one filtrowane? – podiluska

Odpowiedz

5

To nie jest kwestia entity-framework, pomimo tego, co twój związek może powiedzieć innym. Jest to w stosunku do MySqlConnector/net. Mogę to udowodnić! Ach, nie spodziewałem się tego, huh.

Podaj ten dokładny scenariusz za pomocą bazy danych MSSQL, ze złączem System.Data, a zobaczysz poprawnie uformowany kod SQL. Jest to problem z projekcjami wewnątrz MySqlConnector. Jeśli chcesz to naprawić, wejdź i sam edytuj.

Oto jak mieć lokalnie zmodyfikowana wersja MySqlConnector/netto: How to customize MySql Connector/net?

Powiązane problemy