Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么EF为simle查询生成子查询?_Mysql_Linq_Entity Framework - Fatal编程技术网

Mysql 为什么EF为simle查询生成子查询?

Mysql 为什么EF为simle查询生成子查询?,mysql,linq,entity-framework,Mysql,Linq,Entity Framework,有一个简单的Linq到EF: 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 但是当我向这个查询

有一个简单的Linq到EF:

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
但是当我向这个查询添加orderby时

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
它生成这个查询

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正在尝试执行内部查询,该查询提取数据库中的所有记录,然后尝试对主题进行排序

我需要一个解决方案来生成下面的sql由linq

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

这不是实体框架问题,不管您的链接可能会告诉其他人什么。它与MySqlConnector/net相关。我可以证明!啊,没想到啊

使用MSSQL数据库和
System.Data
连接器将这个场景连接起来,您将看到格式正确的SQL。这是MySqlConnector内部的投影问题。如果你想修复它,那就自己动手编辑吧


下面是如何获得MySqlConnector/net的本地编辑副本:

为什么它会将它们全部拉回来?它们已被过滤?我不认为这应该比您建议的查询慢多少。我承认EF的版本读起来很难。它非常明确地过滤子查询,然后对最终结果集进行排序。也许这就是LINQ确保RDBMS在过滤之前不会对所有结果进行排序的方法?你的索引设置正确吗?每个查询的一些性能指标如何?EF不生成SQL。它生成一个ADO.NET CCT。您的MySQL提供程序生成SQL。询问提供程序的作者,为什么它会生成MySQL不能很好处理的SQL。@CraigStuntz请阅读此线程问:还有一个问题,这个问题与MySQL数据提供程序有关,或者它来自EntityFramework/Linq to entities的核心?答:这与EF有关,如果可能的话,我建议您以后升级版本,最新版本会更有效。:)@GhootiFarangi:我重复一遍:EF不会生成SQL;您的MySQL提供程序可以。EF对MySQL的SQL语法一无所知。这来自提供者。我看到一个微软的人有点暗示了另一种情况,但这并不是真的。