public static FilterQuery <Person.Model.Entity.Person> GetQuery(this SearchPersonFilter filter, IQueryRepositoryFactory factory) { var personQuery = factory.GetRepository <Person.Model.Entity.Person>().Query(); var criteria = GetCriterias(filter).Where(x => x != null); foreach (var c in criteria) { personQuery = from query in personQuery join criteriaQuery in c.GetQuery(factory) on query.Id equals criteriaQuery select query; } //это не очень хорошо personQuery = personQuery.Distinct(); return(new FilterQuery <Person.Model.Entity.Person> { Query = personQuery .GenericSort(filter.SortBy, persons => persons.OrderBy(x => x.Id)) .Skip(filter.PageSize * (filter.PageNumber - 1)) .Take(filter.PageSize), PageNumber = filter.PageNumber, PageSize = filter.PageSize, TotalCount = personQuery.Count() }); }
private static IEnumerable <ISearchCriteria> GetCriterias(SearchPersonFilter filter) { yield return(filter.City.MapString(city => new PersonExpressionCriteria(p => p.City.Contains(city)))); yield return(filter.ZipCode.MapString(zipCode => new PersonExpressionCriteria(p => p.ZipCode.Contains(zipCode)))); yield return(filter.FirstName.MapString(fName => new PersonExpressionCriteria(p => p.FirstName.Contains(fName)))); yield return(filter.Phone.MapString(phone => new PersonExpressionCriteria(p => p.PhoneNumber.Contains(phone)))); }
public static void NormalizePagination(this SearchPersonFilter filter) { if (filter.PageSize <= 0) { filter.PageSize = 5; } if (filter.PageNumber <= 0) { filter.PageNumber = 1; } }
public SearchPersonFilterQuery(SearchPersonFilter filter) { _filter = filter; }