假设我有一个 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 的编写方式。
是的,简单情况下
Select
之后保证顺序不会改变。 Select
只是投影,仅检索所需的字段。
但是有预加载,如果您选择属性集合,例如:
query.Select(x => new { x.PayInfo, x.Payers.ToList() });
单一查询算法可能会添加额外的
ORDER BY
,请参阅单一查询与分割查询
订单可以在
GroupBy
、Distinct
、Join
、GroupJoin
、SelectMany
后更改。