Files
Umbraco-CMS/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicNodeListOrdering.cs
agrath@gmail.com 603a12c5a0 Split umbraco.MacroEngines.Juno into two subfolders (namespaces remain the same)
RazorCore contains all the core razor engine implementation
RazorDynamicNode contains all the DynamicNode functionality and associated support files
2011-02-24 16:05:54 -13:00

56 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
namespace umbraco.MacroEngines
{
public static class DynamicNodeListOrdering
{
private static object Reduce(Func<DynamicNode, object> func, DynamicNode node)
{
var value = func(node);
while (value is Func<DynamicNode, object>)
{
value = (value as Func<DynamicNode, object>)(node);
}
return value;
}
public static IOrderedQueryable<DynamicNode> OrderBy(object source, object key)
{
IEnumerable<DynamicNode> typedSource = source as IEnumerable<DynamicNode>;
LambdaExpression lambda = key as LambdaExpression;
Func<DynamicNode, object> func = (Func<DynamicNode, object>)lambda.Compile();
IOrderedQueryable<DynamicNode> result = (IOrderedQueryable<DynamicNode>)typedSource.OrderBy(x => Reduce(func, x)).AsQueryable();
return result;
}
public static IOrderedQueryable<DynamicNode> ThenBy(object source, object key)
{
IOrderedQueryable<DynamicNode> typedSource = source as IOrderedQueryable<DynamicNode>;
LambdaExpression lambda = key as LambdaExpression;
Func<DynamicNode, object> func = (Func<DynamicNode, object>)lambda.Compile();
IOrderedQueryable<DynamicNode> result = (IOrderedQueryable<DynamicNode>)typedSource.ThenBy(x => Reduce(func, x)).AsQueryable();
return result;
}
public static IOrderedQueryable<DynamicNode> OrderByDescending(object source, object key)
{
IEnumerable<DynamicNode> typedSource = source as IEnumerable<DynamicNode>;
LambdaExpression lambda = key as LambdaExpression;
Func<DynamicNode, object> func = (Func<DynamicNode, object>)lambda.Compile();
IOrderedQueryable<DynamicNode> result = (IOrderedQueryable<DynamicNode>)typedSource.OrderByDescending(x => Reduce(func, x)).AsQueryable();
return result;
}
public static IOrderedQueryable<DynamicNode> ThenByDescending(object source, object key)
{
IOrderedQueryable<DynamicNode> typedSource = source as IOrderedQueryable<DynamicNode>;
LambdaExpression lambda = key as LambdaExpression;
Func<DynamicNode, object> func = (Func<DynamicNode, object>)lambda.Compile();
IOrderedQueryable<DynamicNode> result = (IOrderedQueryable<DynamicNode>)typedSource.ThenByDescending(x => Reduce(func, x)).AsQueryable();
return result;
}
}
}