@@ -49,17 +49,19 @@ public static IOrderedQueryable<TSource> Sort<TSource>(this IQueryable<TSource>
4949 {
5050 if ( sortQuery . IsAttributeOfRelationship )
5151 {
52+ // For now is created new instance, later resolve from cache
5253 var relatedAttrQuery = new RelatedAttrQuery ( jsonApiContext , sortQuery ) ;
54+ var path = relatedAttrQuery . GetRelatedPropertyPath ( ) ;
5355 return sortQuery . Direction == SortDirection . Descending
54- ? source . OrderByDescending ( relatedAttrQuery )
55- : source . OrderBy ( relatedAttrQuery ) ;
56+ ? source . OrderByDescending ( path )
57+ : source . OrderBy ( path ) ;
5658 }
5759 else
5860 {
5961 var attrQuery = new AttrQuery ( jsonApiContext , sortQuery ) ;
6062 return sortQuery . Direction == SortDirection . Descending
61- ? source . OrderByDescending ( attrQuery )
62- : source . OrderBy ( attrQuery ) ;
63+ ? source . OrderByDescending ( attrQuery . Attribute . InternalAttributeName )
64+ : source . OrderBy ( attrQuery . Attribute . InternalAttributeName ) ;
6365 }
6466 }
6567
@@ -68,30 +70,31 @@ public static IOrderedQueryable<TSource> Sort<TSource>(this IOrderedQueryable<TS
6870 if ( sortQuery . IsAttributeOfRelationship )
6971 {
7072 var relatedAttrQuery = new RelatedAttrQuery ( jsonApiContext , sortQuery ) ;
73+ var path = relatedAttrQuery . GetRelatedPropertyPath ( ) ;
7174 return sortQuery . Direction == SortDirection . Descending
72- ? source . OrderByDescending ( relatedAttrQuery )
73- : source . OrderBy ( relatedAttrQuery ) ;
75+ ? source . OrderByDescending ( path )
76+ : source . OrderBy ( path ) ;
7477 }
7578 else
7679 {
7780 var attrQuery = new AttrQuery ( jsonApiContext , sortQuery ) ;
7881 return sortQuery . Direction == SortDirection . Descending
79- ? source . OrderByDescending ( attrQuery )
80- : source . OrderBy ( attrQuery ) ;
82+ ? source . OrderByDescending ( attrQuery . Attribute . InternalAttributeName )
83+ : source . OrderBy ( attrQuery . Attribute . InternalAttributeName ) ;
8184 }
8285 }
8386
84- public static IOrderedQueryable < TSource > OrderBy < TSource > ( this IQueryable < TSource > source , BaseAttrQuery baseAttrQuery )
85- => CallGenericOrderMethod ( source , baseAttrQuery , "OrderBy" ) ;
87+ public static IOrderedQueryable < TSource > OrderBy < TSource > ( this IQueryable < TSource > source , string propertyName )
88+ => CallGenericOrderMethod ( source , propertyName , "OrderBy" ) ;
8689
87- public static IOrderedQueryable < TSource > OrderByDescending < TSource > ( this IQueryable < TSource > source , BaseAttrQuery baseAttrQuery )
88- => CallGenericOrderMethod ( source , baseAttrQuery , "OrderByDescending" ) ;
90+ public static IOrderedQueryable < TSource > OrderByDescending < TSource > ( this IQueryable < TSource > source , string propertyName )
91+ => CallGenericOrderMethod ( source , propertyName , "OrderByDescending" ) ;
8992
90- public static IOrderedQueryable < TSource > ThenBy < TSource > ( this IOrderedQueryable < TSource > source , BaseAttrQuery baseAttrQuery )
91- => CallGenericOrderMethod ( source , baseAttrQuery , "ThenBy" ) ;
93+ public static IOrderedQueryable < TSource > ThenBy < TSource > ( this IOrderedQueryable < TSource > source , string propertyName )
94+ => CallGenericOrderMethod ( source , propertyName , "ThenBy" ) ;
9295
93- public static IOrderedQueryable < TSource > ThenByDescending < TSource > ( this IOrderedQueryable < TSource > source , BaseAttrQuery baseAttrQuery )
94- => CallGenericOrderMethod ( source , baseAttrQuery , "ThenByDescending" ) ;
96+ public static IOrderedQueryable < TSource > ThenByDescending < TSource > ( this IOrderedQueryable < TSource > source , string propertyName )
97+ => CallGenericOrderMethod ( source , propertyName , "ThenByDescending" ) ;
9598
9699 public static IQueryable < TSource > Filter < TSource > ( this IQueryable < TSource > source , IJsonApiContext jsonApiContext , FilterQuery filterQuery )
97100 {
@@ -206,21 +209,24 @@ public static IQueryable<T> PageForward<T>(this IQueryable<T> source, int pageSi
206209
207210 #region Generic method calls
208211
209- private static IOrderedQueryable < TSource > CallGenericOrderMethod < TSource > ( IQueryable < TSource > source , BaseAttrQuery baseAttrQuery , string method )
212+ private static IOrderedQueryable < TSource > CallGenericOrderMethod < TSource > ( IQueryable < TSource > source , string propertyName , string method )
210213 {
211214 // {x}
212215 var parameter = Expression . Parameter ( typeof ( TSource ) , "x" ) ;
213216 MemberExpression member ;
214- // {x.relationship.propertyName}
215- if ( baseAttrQuery . IsAttributeOfRelationship )
217+
218+ var values = propertyName . Split ( '.' ) ;
219+ if ( values . Length > 1 )
216220 {
217- var relation = Expression . PropertyOrField ( parameter , baseAttrQuery . RelationshipAttribute . InternalRelationshipName ) ;
218- member = Expression . Property ( relation , baseAttrQuery . Attribute . InternalAttributeName ) ;
221+ var relation = Expression . PropertyOrField ( parameter , values [ 0 ] ) ;
222+ // {x.relationship.propertyName}
223+ member = Expression . Property ( relation , values [ 1 ] ) ;
219224 }
220- // {x.propertyName}
221225 else
222- member = Expression . Property ( parameter , baseAttrQuery . Attribute . InternalAttributeName ) ;
223-
226+ {
227+ // {x.propertyName}
228+ member = Expression . Property ( parameter , values [ 0 ] ) ;
229+ }
224230 // {x=>x.propertyName} or {x=>x.relationship.propertyName}
225231 var lambda = Expression . Lambda ( member , parameter ) ;
226232
0 commit comments