public static MongoOptions WithPaging <T>(this MongoOptions options, PagingOptions paging) where T : MultiOptions { if (paging == null) { return(options); } var mongoPagingOptions = paging as MongoPagingOptions; if (mongoPagingOptions != null) { options.BeforeQuery = mongoPagingOptions.BeforeFilter; options.AfterQuery = mongoPagingOptions.AfterFilter; options.SortBy = mongoPagingOptions.SortBy; } options.BeforeValue = paging.Before; options.AfterValue = paging.After; options.Page = paging.Page; options.Limit = paging.Limit; options.HasMore = false; options.HasMoreChanged += (source, args) => paging.HasMore = args.Value; return(options); }
public ICollection <Organization> GetByCriteria(string criteria, PagingOptions paging, OrganizationSortBy sortBy, bool?paid = null, bool?suspended = null) { var options = new MongoOptions().WithPaging(paging); if (!String.IsNullOrWhiteSpace(criteria)) { options.Query = options.Query.And(Query.Matches(FieldNames.Name, new BsonRegularExpression(String.Format("/{0}/i", criteria)))); } if (paid.HasValue) { if (paid.Value) { options.Query = options.Query.And(Query.NE(FieldNames.PlanId, new BsonString(BillingManager.FreePlan.Id))); } else { options.Query = options.Query.And(Query.EQ(FieldNames.PlanId, new BsonString(BillingManager.FreePlan.Id))); } } if (suspended.HasValue) { if (suspended.Value) { options.Query = options.Query.And( Query.Or( Query.And( Query.NE(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Active)), Query.NE(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Trialing)), Query.NE(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Canceled)) ), Query.EQ(FieldNames.IsSuspended, new BsonBoolean(true)))); } else { options.Query = options.Query.And( Query.Or( Query.EQ(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Active)), Query.EQ(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Trialing)), Query.EQ(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Canceled)) ), Query.EQ(FieldNames.IsSuspended, new BsonBoolean(false))); } } switch (sortBy) { case OrganizationSortBy.Newest: options.SortBy = SortBy.Descending(FieldNames.Id); break; case OrganizationSortBy.Subscribed: options.SortBy = SortBy.Descending(FieldNames.SubscribeDate); break; case OrganizationSortBy.MostActive: options.SortBy = SortBy.Descending(FieldNames.TotalEventCount); break; default: options.SortBy = SortBy.Ascending(FieldNames.Name); break; } return(Find <Organization>(options)); }