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
This commit is contained in:
loudej
2009-11-26 01:22:06 +00:00
parent 51f99de109
commit 16866650b2
2 changed files with 18 additions and 6 deletions

View File

@@ -43,6 +43,15 @@ namespace Orchard.Models {
public static IEnumerable<T> List<T>(this IContentQuery query) where T : class, IContent { public static IEnumerable<T> List<T>(this IContentQuery query) where T : class, IContent {
return query.List().AsPart<T>(); return query.List().AsPart<T>();
} }
public static IEnumerable<T> Slice<T>(this IContentQuery query, int skip, int count) where T : class, IContent {
return query.Slice(skip, count).AsPart<T>();
}
public static IEnumerable<T> Slice<T>(this IContentQuery query, int count) where T : class, IContent {
return query.Slice(0, count).AsPart<T>();
}
public static IEnumerable<ContentItem> Slice(this IContentQuery query, int count) {
return query.Slice(0, count);
}

View File

@@ -37,7 +37,7 @@ namespace Orchard.Models {
ICriteria BindCriteriaByPath(string path) { ICriteria BindCriteriaByPath(string path) {
var itemCriteria = BindItemCriteria(); var itemCriteria = BindItemCriteria();
// special if the content item is ever used as where or order // special if the content item is ever used as where or order
if (path == typeof(ContentItemRecord).Name) if (path == typeof(ContentItemRecord).Name)
return itemCriteria; return itemCriteria;
@@ -85,10 +85,10 @@ namespace Orchard.Models {
// translate it into the nhibernate ordering // translate it into the nhibernate ordering
var criteria = (CriteriaImpl)queryProvider.TranslateExpression(queryable.Expression); var criteria = (CriteriaImpl)queryProvider.TranslateExpression(queryable.Expression);
// attaching orderings to the query's criteria // attaching orderings to the query's criteria
var recordCriteria = BindCriteriaByPath(typeof(TRecord).Name); var recordCriteria = BindCriteriaByPath(typeof(TRecord).Name);
foreach(var ordering in criteria.IterateOrderings()){ foreach (var ordering in criteria.IterateOrderings()) {
recordCriteria.AddOrder(ordering.Order); recordCriteria.AddOrder(ordering.Order);
} }
@@ -119,9 +119,12 @@ namespace Orchard.Models {
} }
public IEnumerable<ContentItem> Slice(int skip, int count) { public IEnumerable<ContentItem> Slice(int skip, int count) {
return BindItemCriteria() var criteria = BindItemCriteria();
.SetFirstResult(skip) if (skip != 0)
.SetMaxResults(count) criteria = criteria.SetFirstResult(skip);
if (count != 0)
criteria = criteria.SetMaxResults(skip);
criteria
.List<ContentItemRecord>() .List<ContentItemRecord>()
.Select(x => ContentManager.Get(x.Id)); .Select(x => ContentManager.Get(x.Id));
} }