seperate sort builder from filter builder.
makes logic more seperated.
This commit is contained in:
		
							parent
							
								
									0540554877
								
							
						
					
					
						commit
						71b207ef78
					
				| @ -82,7 +82,7 @@ namespace PoweredSoft.DynamicLinq.Test | ||||
| 
 | ||||
|             // the query. | ||||
|             var query = posts.AsQueryable(); | ||||
|             var queryBuilder = new PoweredSoft.DynamicLinq.Fluent.QueryBuilder<Post>(query); | ||||
|             var queryBuilder = new PoweredSoft.DynamicLinq.Fluent.SortBuilder<Post>(query); | ||||
| 
 | ||||
|             // add some sorting. | ||||
|             queryBuilder | ||||
|  | ||||
| @ -32,7 +32,7 @@ namespace PoweredSoft.DynamicLinq | ||||
| 
 | ||||
|         public static IQueryable<T> Sort<T>(this IQueryable<T> query, string path, QuerySortDirection sortDirection, bool appendSort) | ||||
|         { | ||||
|             var qb = new QueryBuilder<T>(query); | ||||
|             var qb = new SortBuilder<T>(query); | ||||
|             qb.Sort(path, sortDirection, appendSort); | ||||
|             var ret = qb.Build(); | ||||
|             return ret; | ||||
| @ -40,7 +40,7 @@ namespace PoweredSoft.DynamicLinq | ||||
| 
 | ||||
|         public static IQueryable<T> OrderBy<T>(this IQueryable<T> query, string path) | ||||
|         { | ||||
|             var qb = new QueryBuilder<T>(query); | ||||
|             var qb = new SortBuilder<T>(query); | ||||
|             qb.OrderBy(path); | ||||
|             var ret = qb.Build(); | ||||
|             return ret; | ||||
| @ -48,7 +48,7 @@ namespace PoweredSoft.DynamicLinq | ||||
| 
 | ||||
|         public static IQueryable<T> OrderByDescending<T>(this IQueryable<T> query, string path) | ||||
|         { | ||||
|             var qb = new QueryBuilder<T>(query); | ||||
|             var qb = new SortBuilder<T>(query); | ||||
|             qb.OrderByDescending(path); | ||||
|             var ret = qb.Build(); | ||||
|             return ret; | ||||
| @ -56,7 +56,7 @@ namespace PoweredSoft.DynamicLinq | ||||
| 
 | ||||
|         public static IQueryable<T> ThenBy<T>(this IQueryable<T> query, string path) | ||||
|         { | ||||
|             var qb = new QueryBuilder<T>(query); | ||||
|             var qb = new SortBuilder<T>(query); | ||||
|             qb.ThenBy(path); | ||||
|             var ret = qb.Build(); | ||||
|             return ret; | ||||
| @ -64,7 +64,7 @@ namespace PoweredSoft.DynamicLinq | ||||
| 
 | ||||
|         public static IQueryable<T> ThenByDescending<T>(this IQueryable<T> query, string path) | ||||
|         { | ||||
|             var qb = new QueryBuilder<T>(query); | ||||
|             var qb = new SortBuilder<T>(query); | ||||
|             qb.ThenByDescending(path); | ||||
|             var ret = qb.Build(); | ||||
|             return ret; | ||||
|  | ||||
| @ -11,8 +11,6 @@ namespace PoweredSoft.DynamicLinq.Fluent | ||||
|     public class QueryBuilder<T> : QueryBuilderBase | ||||
|     { | ||||
|         public IQueryable<T> Query { get; set; } | ||||
| 
 | ||||
|         public Type QueryableType { get; set; } | ||||
|         | ||||
|         public QueryBuilder(IQueryable<T> query) | ||||
|         { | ||||
| @ -24,27 +22,6 @@ namespace PoweredSoft.DynamicLinq.Fluent | ||||
|             // the query. | ||||
|             var query = Query; | ||||
| 
 | ||||
|             // build the filters. | ||||
|             query = BuildFilters(query); | ||||
| 
 | ||||
|             // build the sorts | ||||
|             query = BuildSorts(query); | ||||
|              | ||||
|             return query; | ||||
|         } | ||||
| 
 | ||||
|         protected virtual IQueryable<T> BuildSorts(IQueryable<T> query) | ||||
|         { | ||||
|             Sorts.ForEach(sort => | ||||
|             { | ||||
|                 query = QueryableHelpers.CreateSortExpression(query, sort.Path, sort.sortDirection, sort.AppendSort); | ||||
|             }); | ||||
| 
 | ||||
|             return query; | ||||
|         } | ||||
| 
 | ||||
|         protected virtual IQueryable<T> BuildFilters(IQueryable<T> query) | ||||
|         { | ||||
|             if (Filters == null || Filters?.Count() == 0) | ||||
|                 return query; | ||||
| 
 | ||||
|  | ||||
| @ -13,8 +13,6 @@ namespace PoweredSoft.DynamicLinq.Fluent | ||||
| 
 | ||||
|         public List<QueryBuilderFilter> Filters { get; protected set; } = new List<QueryBuilderFilter>(); | ||||
| 
 | ||||
|         public List<QueryBuilderSort> Sorts { get; protected set; } = new List<QueryBuilderSort>(); | ||||
| 
 | ||||
|         public virtual QueryBuilderBase NullChecking(bool check = true) | ||||
|         { | ||||
|             IsNullCheckingEnabled = check; | ||||
| @ -37,18 +35,7 @@ namespace PoweredSoft.DynamicLinq.Fluent | ||||
|             }); | ||||
| 
 | ||||
|             return this; | ||||
|         } | ||||
| 
 | ||||
|         public virtual QueryBuilderBase Sort(string path, QuerySortDirection sortDirection, bool appendSort) | ||||
|         { | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = sortDirection, | ||||
|                 AppendSort = appendSort | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
|         }  | ||||
| 
 | ||||
|         protected abstract QueryBuilderBase GetSubQueryBuilder(); | ||||
| 
 | ||||
| @ -70,51 +57,5 @@ namespace PoweredSoft.DynamicLinq.Fluent | ||||
|             //return self. | ||||
|             return this; | ||||
|         }         | ||||
| 
 | ||||
|         public virtual QueryBuilderBase OrderBy(string path) | ||||
|         { | ||||
|             Sorts.Clear(); | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = QuerySortDirection.Ascending, | ||||
|                 AppendSort = false | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
| 
 | ||||
|         public virtual QueryBuilderBase OrderByDescending(string path) | ||||
|         { | ||||
|             Sorts.Clear(); | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = QuerySortDirection.Descending, | ||||
|                 AppendSort = false | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
| 
 | ||||
|         public virtual QueryBuilderBase ThenBy(string path) | ||||
|         { | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = QuerySortDirection.Ascending, | ||||
|                 AppendSort = true | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
| 
 | ||||
|         public virtual QueryBuilderBase ThenByDescending(string path) | ||||
|         { | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = QuerySortDirection.Descending, | ||||
|                 AppendSort = true | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										92
									
								
								PoweredSoft.DynamicLinq/Fluent/Sort/SortBuilder.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								PoweredSoft.DynamicLinq/Fluent/Sort/SortBuilder.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,92 @@ | ||||
| using PoweredSoft.DynamicLinq.Helpers; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| 
 | ||||
| namespace PoweredSoft.DynamicLinq.Fluent | ||||
| { | ||||
|     public class SortBuilderBase | ||||
|     { | ||||
|         public List<QueryBuilderSort> Sorts { get; protected set; } = new List<QueryBuilderSort>(); | ||||
| 
 | ||||
|         public virtual SortBuilderBase Sort(string path, QuerySortDirection sortDirection, bool appendSort) | ||||
|         { | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = sortDirection, | ||||
|                 AppendSort = appendSort | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
| 
 | ||||
|         public virtual SortBuilderBase OrderBy(string path) | ||||
|         { | ||||
|             Sorts.Clear(); | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = QuerySortDirection.Ascending, | ||||
|                 AppendSort = false | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
| 
 | ||||
|         public virtual SortBuilderBase OrderByDescending(string path) | ||||
|         { | ||||
|             Sorts.Clear(); | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = QuerySortDirection.Descending, | ||||
|                 AppendSort = false | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
| 
 | ||||
|         public virtual SortBuilderBase ThenBy(string path) | ||||
|         { | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = QuerySortDirection.Ascending, | ||||
|                 AppendSort = true | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
| 
 | ||||
|         public virtual SortBuilderBase ThenByDescending(string path) | ||||
|         { | ||||
|             Sorts.Add(new QueryBuilderSort | ||||
|             { | ||||
|                 Path = path, | ||||
|                 sortDirection = QuerySortDirection.Descending, | ||||
|                 AppendSort = true | ||||
|             }); | ||||
|             return this; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public class SortBuilder<T> : SortBuilderBase | ||||
|     { | ||||
|         public IQueryable<T> Query { get; } | ||||
| 
 | ||||
|         public SortBuilder(IQueryable<T> query) | ||||
|         { | ||||
|             Query = query; | ||||
|         } | ||||
| 
 | ||||
|         public virtual IQueryable<T> Build() | ||||
|         { | ||||
|             var query = Query; | ||||
| 
 | ||||
|             Sorts.ForEach(sort => | ||||
|             { | ||||
|                 query = QueryableHelpers.CreateSortExpression(query, sort.Path, sort.sortDirection, sort.AppendSort); | ||||
|             }); | ||||
| 
 | ||||
|             return query; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user