Files
Umbraco-CMS/umbraco.MacroEngines.Juno/RazorDynamicNode/Grouping.cs
agrath@gmail.com 288bbe7b91 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.
2011-06-13 09:12:11 -02:00

60 lines
1.8 KiB
C#

using System;
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> where T : DynamicObject
{
public K Key { get; set; }
public IEnumerable<T> Elements;
public IEnumerator<T> GetEnumerator()
{
return Elements.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
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;
});
}
}
}
}