Added OrderBy to Grouping so the nested lists can be ordered by (supports single property only but does handle desc)
You can control the Group order by manipulating the source list order. Groups will be enumerated in the order they occur.
This commit is contained in:
@@ -3,10 +3,11 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
using System.Dynamic;
|
||||
|
||||
namespace umbraco.MacroEngines
|
||||
{
|
||||
public class Grouping<K, T> : IGrouping<K, T>
|
||||
public class Grouping<K, T> : IGrouping<K, T> where T : DynamicObject
|
||||
{
|
||||
public K Key { get; set; }
|
||||
public IEnumerable<T> Elements;
|
||||
@@ -19,6 +20,40 @@ namespace umbraco.MacroEngines
|
||||
{
|
||||
return (IEnumerator)GetEnumerator();
|
||||
}
|
||||
|
||||
public IOrderedEnumerable<T> OrderBy(string ordering)
|
||||
{
|
||||
bool descending = false;
|
||||
if (ordering.IndexOf(" descending", StringComparison.CurrentCultureIgnoreCase) >= 0)
|
||||
{
|
||||
ordering = ordering.Replace(" descending", "");
|
||||
descending = true;
|
||||
}
|
||||
if (ordering.IndexOf(" desc", StringComparison.CurrentCultureIgnoreCase) >= 0)
|
||||
{
|
||||
ordering = ordering.Replace(" desc", "");
|
||||
descending = true;
|
||||
}
|
||||
|
||||
if (!descending)
|
||||
{
|
||||
return Elements.OrderBy(item =>
|
||||
{
|
||||
object key = null;
|
||||
(item as DynamicObject).TryGetMember(new DynamicQueryableGetMemberBinder(ordering, false), out key);
|
||||
return key;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
return Elements.OrderByDescending(item =>
|
||||
{
|
||||
object key = null;
|
||||
(item as DynamicObject).TryGetMember(new DynamicQueryableGetMemberBinder(ordering, false), out key);
|
||||
return key;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user