2012-10-02 10 views
5

簡単なLINQのは、EFにあります:EFがsimleクエリのサブクエリを生成するのはなぜですか?

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

それは、この形式のSQL生成:

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

をしかし、私はこのクエリ

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

へ順を追加するとき、それが生成しますこのクエリ

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 

サブクエリが生成されるのはなぜですか?MySQLではこのクエリのパフォーマンスに問題があります。 MySQLは内部クエリを実行しようとしています。内部クエリはデータベース内のすべてのレコードを取り戻し、テーマをソートしようとします。

私はこれがあなたのリンクは他の人に伝えるかもしれないものにもかかわらず、エンティティフレームワークの問題ではありません

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

が、それはあなたにどのような違いを生むん:ここでは

はMySqlConnector /ネットのローカルで編集コピーを持ってする方法ですか? – podiluska

+0

@podiluska MySQLでこのクエリのパフォーマンスに問題があります。 MySQLは内部クエリを実行しようとしています。内部クエリはデータベース内のすべてのレコードを取り戻し、テーマをソートしようとします。 –

+5

なぜそれらはすべて元に戻りますか?フィルタリングされていますか? – podiluska

答えて

5

LINQでSQLの下に生成するソリューションを必要としています。これは、MySqlConnector/netに関連しています。私はそれを証明することができます!ああ、それを期待していなかった。

System.Dataコネクタを使用してMSSQLデータベースを使用してこの正確なシナリオをフックしてください。正しく構成されたSQLが表示されます。これは、MySqlConnector内部の予測に関する問題です。それを修正したい場合は、自分で編集してください。 How to customize MySql Connector/net?

関連する問題