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 {
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) {
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<ContentItem> 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<ContentItemRecord>()
.Select(x => ContentManager.Get(x.Id));
}