实体框架:OrderBy 之后的 Select 是否仍然保证有序投影?

问题描述 投票:0回答:1

假设我有一个 Entity Framework 6 查询,如下所示:

var orderedPayInfoes = context.Employees
       .Where(x => x.EmployeeId > 5)
       .OrderBy(x => x.CreatedOn)
       .Select(x => x.PayInfo);

我知道打字不会尊重之前声明的顺序。 例如,类型将是

IQueryable<PayInfo>
而不是
IOrderedQueryable<PayInfo>
。 有保证单吗?

注意: 仅通过测试无法正确验证这一点,因为 QueryConverter 内部具有优化功能,可以根据提供的查询改变 SQL 的编写方式。

c# entity-framework orm
1个回答
0
投票

是的,简单情况下

Select
之后保证顺序不会改变。
Select
只是投影,仅检索所需的字段。

但是有预加载,如果您选择属性集合,例如:

query.Select(x => new { x.PayInfo, x.Payers.ToList() });

单一查询算法可能会添加额外的

ORDER BY
,请参阅单一查询与分割查询

订单可以在

GroupBy
Distinct
Join
GroupJoin
SelectMany
后更改。

© www.soinside.com 2019 - 2024. All rights reserved.