From 16866650b210a973d47c2eb76d2b94b2b34c83f3 Mon Sep 17 00:00:00 2001 From: loudej Date: Thu, 26 Nov 2009 01:22:06 +0000 Subject: [PATCH] Adding some extension methods around Slice, and ignoring zero values in skip and count. --HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4042276 --- src/Orchard/Models/ContentExtensions.cs | 9 +++++++++ src/Orchard/Models/DefaultContentQuery.cs | 15 +++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/Orchard/Models/ContentExtensions.cs b/src/Orchard/Models/ContentExtensions.cs index 219515f38..d82ca3604 100644 --- a/src/Orchard/Models/ContentExtensions.cs +++ b/src/Orchard/Models/ContentExtensions.cs @@ -43,6 +43,15 @@ namespace Orchard.Models { public static IEnumerable List(this IContentQuery query) where T : class, IContent { return query.List().AsPart(); } + public static IEnumerable Slice(this IContentQuery query, int skip, int count) where T : class, IContent { + return query.Slice(skip, count).AsPart(); + } + public static IEnumerable Slice(this IContentQuery query, int count) where T : class, IContent { + return query.Slice(0, count).AsPart(); + } + public static IEnumerable Slice(this IContentQuery query, int count) { + return query.Slice(0, count); + } diff --git a/src/Orchard/Models/DefaultContentQuery.cs b/src/Orchard/Models/DefaultContentQuery.cs index 3801a7734..5838a998b 100644 --- a/src/Orchard/Models/DefaultContentQuery.cs +++ b/src/Orchard/Models/DefaultContentQuery.cs @@ -37,7 +37,7 @@ namespace Orchard.Models { ICriteria BindCriteriaByPath(string path) { var itemCriteria = BindItemCriteria(); - + // special if the content item is ever used as where or order if (path == typeof(ContentItemRecord).Name) return itemCriteria; @@ -85,10 +85,10 @@ namespace Orchard.Models { // translate it into the nhibernate ordering var criteria = (CriteriaImpl)queryProvider.TranslateExpression(queryable.Expression); - + // attaching orderings to the query's criteria var recordCriteria = BindCriteriaByPath(typeof(TRecord).Name); - foreach(var ordering in criteria.IterateOrderings()){ + foreach (var ordering in criteria.IterateOrderings()) { recordCriteria.AddOrder(ordering.Order); } @@ -119,9 +119,12 @@ namespace Orchard.Models { } public IEnumerable Slice(int skip, int count) { - return BindItemCriteria() - .SetFirstResult(skip) - .SetMaxResults(count) + var criteria = BindItemCriteria(); + if (skip != 0) + criteria = criteria.SetFirstResult(skip); + if (count != 0) + criteria = criteria.SetMaxResults(skip); + criteria .List() .Select(x => ContentManager.Get(x.Id)); }