@@ -49,17 +49,19 @@ public static IOrderedQueryable<TSource> Sort<TSource>(this IQueryable<TSource>
49
49
{
50
50
if ( sortQuery . IsAttributeOfRelationship )
51
51
{
52
+ // For now is created new instance, later resolve from cache
52
53
var relatedAttrQuery = new RelatedAttrQuery ( jsonApiContext , sortQuery ) ;
54
+ var path = relatedAttrQuery . GetRelatedPropertyPath ( ) ;
53
55
return sortQuery . Direction == SortDirection . Descending
54
- ? source . OrderByDescending ( relatedAttrQuery )
55
- : source . OrderBy ( relatedAttrQuery ) ;
56
+ ? source . OrderByDescending ( path )
57
+ : source . OrderBy ( path ) ;
56
58
}
57
59
else
58
60
{
59
61
var attrQuery = new AttrQuery ( jsonApiContext , sortQuery ) ;
60
62
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 ) ;
63
65
}
64
66
}
65
67
@@ -68,30 +70,31 @@ public static IOrderedQueryable<TSource> Sort<TSource>(this IOrderedQueryable<TS
68
70
if ( sortQuery . IsAttributeOfRelationship )
69
71
{
70
72
var relatedAttrQuery = new RelatedAttrQuery ( jsonApiContext , sortQuery ) ;
73
+ var path = relatedAttrQuery . GetRelatedPropertyPath ( ) ;
71
74
return sortQuery . Direction == SortDirection . Descending
72
- ? source . OrderByDescending ( relatedAttrQuery )
73
- : source . OrderBy ( relatedAttrQuery ) ;
75
+ ? source . OrderByDescending ( path )
76
+ : source . OrderBy ( path ) ;
74
77
}
75
78
else
76
79
{
77
80
var attrQuery = new AttrQuery ( jsonApiContext , sortQuery ) ;
78
81
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 ) ;
81
84
}
82
85
}
83
86
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" ) ;
86
89
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" ) ;
89
92
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" ) ;
92
95
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" ) ;
95
98
96
99
public static IQueryable < TSource > Filter < TSource > ( this IQueryable < TSource > source , IJsonApiContext jsonApiContext , FilterQuery filterQuery )
97
100
{
@@ -206,21 +209,24 @@ public static IQueryable<T> PageForward<T>(this IQueryable<T> source, int pageSi
206
209
207
210
#region Generic method calls
208
211
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 )
210
213
{
211
214
// {x}
212
215
var parameter = Expression . Parameter ( typeof ( TSource ) , "x" ) ;
213
216
MemberExpression member ;
214
- // {x.relationship.propertyName}
215
- if ( baseAttrQuery . IsAttributeOfRelationship )
217
+
218
+ var values = propertyName . Split ( '.' ) ;
219
+ if ( values . Length > 1 )
216
220
{
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 ] ) ;
219
224
}
220
- // {x.propertyName}
221
225
else
222
- member = Expression . Property ( parameter , baseAttrQuery . Attribute . InternalAttributeName ) ;
223
-
226
+ {
227
+ // {x.propertyName}
228
+ member = Expression . Property ( parameter , values [ 0 ] ) ;
229
+ }
224
230
// {x=>x.propertyName} or {x=>x.relationship.propertyName}
225
231
var lambda = Expression . Lambda ( member , parameter ) ;
226
232
0 commit comments