gpt4 book ai didi

mysql - 为什么 EF 为简单查询生成子查询?

转载 作者:可可西里 更新时间:2023-11-01 07:05:28 25 4
gpt4 key购买 nike

有一个简单的 Linq to 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

但是当我向这个查询添加一个 order by 时

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

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

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

最佳答案

这不是 Entity Framework 问题,尽管您的链接可能会告诉其他人。它与 MySqlConnector/net 有关。我可以证明!啊,没想到吧。

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

以下是如何在本地编辑 MySqlConnector/net 的副本:How to customize MySql Connector/net?

关于mysql - 为什么 EF 为简单查询生成子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12690775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com