public void BuildExpression_TotalPageLtGtWithOr_ShouldMatchCount(List <Book> data, int min, int some) { // Arrange var max = min + some; var filter = new BookFilter_OperatorFilter_TotalPage { TotalPage = new OperatorFilter <int> { Gt = min, Lt = max, CombineWith = CombineType.Or } }; // Act var query = data.AsQueryable().ApplyFilter(filter); var result = query.ToList(); // Assert var actualResult = data.AsQueryable().Where(x => x.TotalPage > min || x.TotalPage < max).ToList(); Assert.Equal(actualResult.Count, result.Count); foreach (var item in actualResult) { Assert.Contains(item, result); } }
public void BuildExpression_TotalPageEqWithAnd_ShouldMatchCount(List <Book> data, int totalPage) { // Arrange var filter = new BookFilter_OperatorFilter_TotalPage { TotalPage = new OperatorFilter <int> { Eq = totalPage, CombineWith = CombineType.And } }; // Act var query = data.AsQueryable().ApplyFilter(filter); var result = query.ToList(); // Assert var actualResult = data.AsQueryable().Where(x => x.TotalPage == totalPage).ToList(); Assert.Equal(actualResult.Count, result.Count); foreach (var item in actualResult) { Assert.Contains(item, result); } }
public void BuildExpression_TotalPageWithAnd_SholdMatchCount(List <Book> data, BookFilter_OperatorFilter_TotalPage filter) { // Arrange filter.CombineWith = CombineType.And; Stopwatch sw = new Stopwatch(); // Act sw.Restart(); var classicalQuery = GetAndQuery(data.AsQueryable(), filter); var classicalResult = classicalQuery.ToList(); sw.Stop(); var classicalElapsed = sw.ElapsedTicks; Console.WriteLine(classicalElapsed); sw.Start(); var query = data.AsQueryable().ApplyFilter(filter); var result = query.ToList(); sw.Stop(); var applyFilterElapsed = sw.ElapsedTicks; Console.WriteLine(applyFilterElapsed); // Assert Assert.True((classicalElapsed * 1.5f) > applyFilterElapsed); // Can't be slower than 1.5 times. // Local functions IQueryable <Book> GetAndQuery(IQueryable <Book> query, BookFilter_OperatorFilter_TotalPage f) { if (f.TotalPage.Eq != null) { query = query.Where(x => x.TotalPage == f.TotalPage.Eq); } if (f.TotalPage.Not != null) { query = query.Where(x => x.TotalPage != f.TotalPage.Not); } if (f.TotalPage.Gt != null) { query = query.Where(x => x.TotalPage > f.TotalPage.Gt); } if (f.TotalPage.Gte != null) { query = query.Where(x => x.TotalPage >= f.TotalPage.Gte); } if (f.TotalPage.Lt != null) { query = query.Where(x => x.TotalPage < f.TotalPage.Lt); } if (f.TotalPage.Lte != null) { query = query.Where(x => x.TotalPage <= f.TotalPage.Lt); } return(query); } }
public void BuildExpression_TotalPageWithAnd_SholdMatchCount(List <Book> data, BookFilter_OperatorFilter_TotalPage filter) { // Arrange filter.CombineWith = CombineType.And; // Act var query = data.AsQueryable().ApplyFilter(filter); var result = query.ToList(); // Assert var f = filter; var actualResult = GetAndQuery(data.AsQueryable(), filter).ToList(); Assert.Equal(actualResult.Count, result.Count); foreach (var item in actualResult) { Assert.Contains(item, result); } IQueryable <Book> GetAndQuery(IQueryable <Book> query, BookFilter_OperatorFilter_TotalPage f) { if (f.TotalPage.Eq != null) { query = query.Where(x => x.TotalPage == f.TotalPage.Eq); } if (f.TotalPage.Not != null) { query = query.Where(x => x.TotalPage != f.TotalPage.Not); } if (f.TotalPage.Gt != null) { query = query.Where(x => x.TotalPage > f.TotalPage.Gt); } if (f.TotalPage.Gte != null) { query = query.Where(x => x.TotalPage >= f.TotalPage.Gte); } if (f.TotalPage.Lt != null) { query = query.Where(x => x.TotalPage < f.TotalPage.Lt); } if (f.TotalPage.Lte != null) { query = query.Where(x => x.TotalPage <= f.TotalPage.Lt); } return(query); } }