sort fix.
This commit is contained in:
		
							parent
							
								
									788078bc49
								
							
						
					
					
						commit
						7a39d70a3e
					
				| @ -32,5 +32,62 @@ namespace PoweredSoft.DynamicQuery.Test | |||||||
|                 Assert.Equal(shouldResult, result.Data); |                 Assert.Equal(shouldResult, result.Data); | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         [Fact] | ||||||
|  |         public void MultiSort() | ||||||
|  |         { | ||||||
|  |             MockContextFactory.SeedAndTestContextFor("SortTests_MultiSort", TestSeeders.SimpleSeedScenario, ctx => | ||||||
|  |             { | ||||||
|  |                 var shouldResult = ctx.Orders.OrderBy(t => t.Customer.FirstName).ThenBy(t => t.OrderNum).ToList(); | ||||||
|  | 
 | ||||||
|  |                 // query handler that is empty should be the same as running to list. | ||||||
|  |                 var criteria = new QueryCriteria() | ||||||
|  |                 { | ||||||
|  |                     Sorts = new List<ISort>() | ||||||
|  |                     { | ||||||
|  |                         new Sort("Customer.FirstName"), | ||||||
|  |                         new Sort("OrderNum") | ||||||
|  |                     } | ||||||
|  |                 }; | ||||||
|  | 
 | ||||||
|  |                 var queryHandler = new QueryHandler(); | ||||||
|  |                 var result = queryHandler.Execute(ctx.Orders, criteria); | ||||||
|  |                 Assert.Equal(shouldResult, result.Data); | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private class MockSortInterceptor : ISortInterceptor | ||||||
|  |         { | ||||||
|  |             public IEnumerable<ISort> InterceptSort(IEnumerable<ISort> sort) | ||||||
|  |             { | ||||||
|  |                 if (sort.Count() == 1 && sort.First().Path == "OrderNumStr") | ||||||
|  |                     return new ISort[] { new Sort("OrderNum", false) }; | ||||||
|  | 
 | ||||||
|  |                 return sort; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [Fact] | ||||||
|  |         public void SortInterceptor() | ||||||
|  |         { | ||||||
|  |             MockContextFactory.SeedAndTestContextFor("SortTests_SortInterceptor", TestSeeders.SimpleSeedScenario, ctx => | ||||||
|  |             { | ||||||
|  |                 var shouldResult = ctx.Orders.OrderByDescending(t => t.OrderNum).ToList(); | ||||||
|  | 
 | ||||||
|  |                 // query handler that is empty should be the same as running to list. | ||||||
|  |                 var criteria = new QueryCriteria() | ||||||
|  |                 { | ||||||
|  |                     Sorts = new List<ISort>() | ||||||
|  |                     { | ||||||
|  |                         new Sort("OrderNumStr", false) | ||||||
|  |                     } | ||||||
|  |                 }; | ||||||
|  | 
 | ||||||
|  |                 var queryHandler = new QueryHandler(); | ||||||
|  |                 queryHandler.AddInterceptor(new MockSortInterceptor()); | ||||||
|  |                 var result = queryHandler.Execute(ctx.Orders, criteria); | ||||||
|  |                 Assert.Equal(shouldResult, result.Data); | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -68,11 +68,18 @@ namespace PoweredSoft.DynamicQuery | |||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             bool isAppending = false; | ||||||
|             Criteria.Sorts.ForEach(sort => |             Criteria.Sorts.ForEach(sort => | ||||||
|             { |             { | ||||||
|                 var transformedSort = InterceptSort<T>(sort); |                 var transformedSort = InterceptSort<T>(sort); | ||||||
|                 if (transformedSort.Count == 0) |                 if (transformedSort.Count == 0) | ||||||
|                     return; |                     return; | ||||||
|  | 
 | ||||||
|  |                 transformedSort.ForEach(ts => | ||||||
|  |                 { | ||||||
|  |                     CurrentQueryable = CurrentQueryable.OrderBy(ts.Path, ts.Ascending == false ? QueryOrderByDirection.Descending : QueryOrderByDirection.Ascending, isAppending); | ||||||
|  |                     isAppending = true; | ||||||
|  |                 }); | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user