public PagerList FindAll(string game, string category, string author, string brand, bool pursuit, bool approved, string keyword, SortFileBy sort, SortOrderBy order, int page, int limit) { DetachedCriteria query = DetachedCriteria.For(typeof(File)); AddQuery(query, game, category, author, brand, pursuit, approved, keyword); int count = Count(game, category, author, brand, pursuit, approved, keyword); if (page <= 0) { page = 1; } int start = (page * limit) - limit; AddOrder(query, sort, order); return new PagerList( _repository.FindAll(start, limit, query), page, limit, count ); } public void AddQuery(DetachedCriteria query, string game, string category, string author, string brand, bool pursuit, bool approved, string keyword) { if (game != null) { query.CreateCriteria("Game").Add( Expression.Eq("UrlName", game) ); } if (category != null) { if (category.Contains(",")) { category = category.Replace(",", " "); } query.CreateCriteria("Category").Add( Expression.Eq("Name", category) ); } if (author != null) { if (author.Contains(",")) { author = author.Replace(",", " "); } query.Add( Expression.Eq("AuthorName", author) ); } if (brand != null) { if (brand.Contains(",")) { brand = brand.Replace(",", " "); } query.CreateCriteria("CarFeature").CreateCriteria("Brand").Add( Expression.Eq("Name", brand) ); } if (pursuit) { query.CreateCriteria("CarFeature").Add( Expression.Eq("Pursuit", true) ); } query.Add(Expression.Eq("Approved", approved)); if (!string.IsNullOrEmpty(keyword)) { query.Add(Expression.Like("Name", keyword, MatchMode.Anywhere)); } } public void AddOrder(DetachedCriteria query, SortFileBy sort, SortOrderBy order) { if (sort == SortFileBy.Updated) { if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("DateUpdated")); } else { query.AddOrder(Order.Desc("DateUpdated")); } } else if (sort == SortFileBy.Name) { if (order == SortOrderBy.Asc) { query.CreateCriteria("CarFeature").CreateCriteria("Brand").AddOrder( Order.Asc("Name") ); query.AddOrder(Order.Asc("Name")); } else { query.CreateCriteria("CarFeature").CreateCriteria("Brand").AddOrder( Order.Desc("Name") ); query.AddOrder(Order.Desc("Name")); } } else if (sort == SortFileBy.Downloads) { if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("Downloads")); } else { query.AddOrder(Order.Desc("Downloads")); } } else if (sort == SortFileBy.DownloadsWeek) { if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("DownloadsWeek")); } else { query.AddOrder(Order.Desc("DownloadsWeek")); } } else if (sort == SortFileBy.Views) { if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("Views")); } else { query.AddOrder(Order.Desc("Views")); } } else if (sort == SortFileBy.ViewsWeek) { if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("ViewsWeek")); } else { query.AddOrder(Order.Desc("ViewsWeek")); } } else if (sort == SortFileBy.LastComment) { query.Add(Expression.GtProperty("LastComment", "DateCreated")); if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("LastComment")); } else { query.AddOrder(Order.Desc("LastComment")); } } else if (sort == SortFileBy.Today) { DateTime date = DateTime.Now; query.Add(Expression.Ge("DateCreated", date.AddDays(-1))); query.Add(Expression.Le("DateCreated", date.AddDays(1))); if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("DateCreated")); } else { query.AddOrder(Order.Desc("DateCreated")); } } else if (sort == SortFileBy.Yesterday) { DateTime date = DateTime.Now; query.Add(Expression.Ge("DateCreated", date.AddDays(-2))); query.Add(Expression.Le("DateCreated", date.AddDays(-1))); if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("DateCreated")); } else { query.AddOrder(Order.Desc("DateCreated")); } } else if (sort == SortFileBy.Week) { DateTime date = DateTime.Now; query.Add(Expression.Ge("DateCreated", date.AddDays(-8))); query.Add(Expression.Le("DateCreated", date)); if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("DateCreated")); } else { query.AddOrder(Order.Desc("DateCreated")); } } else { if (order == SortOrderBy.Asc) { query.AddOrder(Order.Asc("DateCreated")); } else { query.AddOrder(Order.Desc("DateCreated")); } } }