Files
Umbraco-CMS/src/Umbraco.Web/Dynamics/DynamicGrouping.cs
Shannon Deminick 54e5140d6a Added more extension methods to our strongly typed IPublishedContent object and IEnumerable<IPublishedContent> to match all of the available methods
that are on the DynamicPublishedContent object. Added more unit tests for all of these classes.
Moved some of the Dynamic objects into the web project which simplifies things quite a bit as some of these classes require access to the biz logic layer.
Now we have intellisense for all of the nice magical methods that were on DynamicPublishedContent on our strongly typed object!
2012-10-04 03:26:56 +05:00

64 lines
2.1 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Collections;
using Umbraco.Core.Models;
using Umbraco.Web.Models;
namespace Umbraco.Web.Dynamics
{
public class DynamicGrouping : IEnumerable<IGrouping<object, IPublishedContent>>, IEnumerable<Grouping<object, DynamicPublishedContent>>
{
internal IEnumerable<Grouping<object, DynamicPublishedContent>> Inner;
public DynamicGrouping OrderBy(string expression)
{
return this;
}
public DynamicGrouping(DynamicPublishedContentList list, string groupBy)
{
Inner =
list
.Items
.Select(node =>
{
string predicate = groupBy;
var internalList = new DynamicPublishedContentList(new DynamicPublishedContent[] { node });
var query = (IQueryable<object>)internalList.Select(predicate, new object[] { });
var key = query.FirstOrDefault();
return new
{
Key = key,
Node = node
};
})
.Where(item => item.Key != null)
.GroupBy(item => item.Key)
.Select(item => new Grouping<object, DynamicPublishedContent>()
{
Key = item.Key,
Elements = item.Select(inner => inner.Node)
});
}
internal DynamicGrouping(IEnumerable<Grouping<object, DynamicPublishedContent>> source)
{
this.Inner = source;
}
IEnumerator<Grouping<object, DynamicPublishedContent>> IEnumerable<Grouping<object, DynamicPublishedContent>>.GetEnumerator()
{
return Inner.GetEnumerator();
}
IEnumerator<IGrouping<object, IPublishedContent>> IEnumerable<IGrouping<object, IPublishedContent>>.GetEnumerator()
{
return Inner.GetEnumerator();
}
public IEnumerator GetEnumerator()
{
return Inner.GetEnumerator();
}
}
}