Files
Umbraco-CMS/src/Umbraco.Web/Dynamics/Grouping.cs

62 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections;
using System.Dynamic;
using Umbraco.Core.Dynamics;
using Umbraco.Web.Models;
namespace Umbraco.Web.Dynamics
{
internal class Grouping<K, T> : IGrouping<K, T> where T : DynamicObject
{
public K Key { get; set; }
public IEnumerable<T> Elements { get; set; }
public IEnumerator<T> GetEnumerator()
{
var temp = new DynamicPublishedContentList(Elements.Cast<DynamicPublishedContent>());
return (IEnumerator<T>)temp.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator)GetEnumerator();
}
public DynamicPublishedContentList 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 new DynamicPublishedContentList(Elements.OrderBy(item =>
{
object key = null;
(item as DynamicObject).TryGetMember(new DynamicQueryableGetMemberBinder(ordering, false), out key);
return key;
}).Cast<DynamicPublishedContent>());
}
else
{
return new DynamicPublishedContentList(Elements.OrderByDescending(item =>
{
object key = null;
(item as DynamicObject).TryGetMember(new DynamicQueryableGetMemberBinder(ordering, false), out key);
return key;
}).Cast<DynamicPublishedContent>());
}
}
}
}