Có một LINQ đơn giản để EF:Tại sao EF tạo truy vấn phụ cho truy vấn nhỏ?
var query = from p in _db.Posts
where p.BlogtId == blogId
select p;
Nó tạo ra SQL theo hình thức này:
SELECT
`Extent1`.`PostId`,
`Extent1`.`BlogId`,
...
FROM `Posts` AS `Extent1`
WHERE `Extent1`.`BlogId` = @p__linq__0
Nhưng khi tôi thêm một trật tự bằng cách để truy vấn này
var query = from p in _db.Posts
where p.BlogId == blogId
orderby p.PublishDate
select p;
Nó tạo truy vấn này
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
Tại sao điều này tạo ra một truy vấn phụ? Có một vấn đề hiệu suất cho truy vấn này trong MySQL. MySQL đang cố gắng thực hiện truy vấn bên trong để kéo tất cả các bản ghi trong cơ sở dữ liệu và sau đó cố gắng sắp xếp chủ đề.
Tôi cần một giải pháp để tạo ra bên dưới sql bởi LINQ
SELECT
`Extent1`.`PostId`,
...
FROM `Posts` AS `Extent1`
WHERE `Extent1`.`BlogId` = @p__linq__0
ORDER BY
`Extent1`.`PublishDate` ASC
khác biệt gì nó làm cho bạn? – podiluska
@podiluska Có một vấn đề về hiệu suất cho truy vấn này trong MySQL. MySQL đang cố gắng thực hiện truy vấn bên trong để kéo tất cả các bản ghi trong cơ sở dữ liệu và sau đó cố gắng sắp xếp chủ đề. –
Tại sao nó sẽ kéo tất cả trở lại - chúng được lọc? – podiluska