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