Skip to content

Commit a389dc7

Browse files
committed
QueryableExtension OrderBy() should not use ExpressionParser
1 parent 1b39fa3 commit a389dc7

File tree

2 files changed

+30
-30
lines changed

2 files changed

+30
-30
lines changed

Radzen.Blazor/DynamicExtensions.cs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,36 @@ public static IOrderedQueryable<T> OrderBy<T>(
7070
{
7171
try
7272
{
73-
return QueryableExtension.OrderBy(source, selector);
73+
selector = $"{selector}";
74+
75+
if (selector.Contains("=>"))
76+
{
77+
var identifierName = selector.Split("=>")[0];
78+
79+
selector = selector.Replace($"{identifierName}=>", "").Trim();
80+
81+
string methodAsc = "OrderBy";
82+
string methodDesc = "OrderByDescending";
83+
84+
Expression expression = source.Expression;
85+
86+
foreach (var part in selector.Split(","))
87+
{
88+
var lambda = ExpressionParser.ParseLambda<T>($"{identifierName.Trim()} => {part}");
89+
90+
expression = Expression.Call(
91+
typeof(Queryable), part.Trim().ToLower().Contains(" desc") ? methodDesc : methodAsc,
92+
new Type[] { source.ElementType, lambda.ReturnType },
93+
expression, Expression.Quote(lambda));
94+
95+
methodAsc = "ThenBy";
96+
methodDesc = "ThenByDescending";
97+
}
98+
99+
return (IOrderedQueryable<T>)source.Provider.CreateQuery(expression);
100+
}
101+
102+
return (IOrderedQueryable<T>)QueryableExtension.OrderBy((IQueryable)source, selector);
74103
}
75104
catch (Exception ex)
76105
{

Radzen.Blazor/QueryableExtension.cs

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -108,35 +108,6 @@ internal static string RemoveVariableReference(string expression)
108108
/// <returns>A <see cref="IQueryable{T}"/> whose elements are sorted according to the specified <paramref name="selector"/>.</returns>
109109
public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> source, string selector = null)
110110
{
111-
selector = $"{selector}";
112-
113-
if (selector.Contains("=>"))
114-
{
115-
var identifierName = selector.Split("=>")[0];
116-
117-
selector = selector.Replace($"{identifierName}=>", "").Trim();
118-
119-
string methodAsc = "OrderBy";
120-
string methodDesc = "OrderByDescending";
121-
122-
Expression expression = source.Expression;
123-
124-
foreach (var part in selector.Split(","))
125-
{
126-
var lambda = ExpressionParser.ParseLambda<T>($"{identifierName.Trim()} => {part}");
127-
128-
expression = Expression.Call(
129-
typeof(Queryable), part.Trim().ToLower().Contains(" desc") ? methodDesc : methodAsc,
130-
new Type[] { source.ElementType, lambda.ReturnType },
131-
expression, Expression.Quote(lambda));
132-
133-
methodAsc = "ThenBy";
134-
methodDesc = "ThenByDescending";
135-
}
136-
137-
return (IOrderedQueryable<T>)source.Provider.CreateQuery(expression);
138-
}
139-
140111
return (IOrderedQueryable<T>)OrderBy((IQueryable)source, selector);
141112
}
142113

0 commit comments

Comments
 (0)