跟踪SQL 发现生成的SQL中所有的字段都进行了排序,查看OData原代码,发现如果实体有Key,就按照Key asc 加上指定字段进行排序
属性 EnsureStableOrdering可以控制是否生成多个字段排序
Type: System.Boolean
A true value indicates the original query should be modified when necessary to guarantee a stable sort order. A false value indicates the sort order can be considered stable without modifying the query. Query providers that ensure a stable sort order should set this value to false. The default value is true.
ODataQuerySettings settings = new ODataQuerySettings() { EnsureStableOrdering = false };
// Returns a sorted list of all properties that may legally appear // in an OrderBy. If the entity type has keys, all are returned. // Otherwise, when no keys are present, all primitive properties are returned. private static IEnumerable<IEdmStructuralProperty> GetAvailableOrderByProperties(ODataQueryContext context) { Contract.Assert(context != null); IEdmEntityType entityType = context.ElementType as IEdmEntityType; if (entityType != null) { IEnumerable<IEdmStructuralProperty> properties = entityType.Key().Any() ? entityType.Key() : entityType .StructuralProperties() .Where(property => property.Type.IsPrimitive()); // Sort properties alphabetically for stable sort return properties.OrderBy(property => property.Name); } else { return Enumerable.Empty<IEdmStructuralProperty>(); } }