public void Map() { var filter = new Filter(new[] { new FilterTerm("A", FilterOperators.Equal, "B"), new FilterTerm("B", FilterOperators.LessThan, 8), new FilterTerm("C", FilterOperators.GreaterThan, DateTime.Today), new InFilterTerm("D", new object[] { 1, 2, 3 }), new RangeFilterTerm("E", DateTime.Today, DateTime.Today.AddDays(7)) }); var generator = new SqlFilterGenerator(filter, (pn) => pn + "x"); var dbFilter = generator.Generate(); Assert.Equal("WHERE Ax = @p0 AND Bx < @p1 AND Cx > @p2 AND Dx IN (@p3,@p4,@p5) AND Ex BETWEEN @p6 AND @p7", dbFilter.WhereClause); Assert.Equal(8, dbFilter.Parameters.Length); Assert.Contains(dbFilter.Parameters, p => p.ParameterName == "@p0" && (string)p.Value == "B"); Assert.Contains(dbFilter.Parameters, p => p.ParameterName == "@p1" && (int)p.Value == 8); Assert.Contains(dbFilter.Parameters, p => p.ParameterName == "@p2" && (DateTime)p.Value == DateTime.Today); Assert.Contains(dbFilter.Parameters, p => p.ParameterName == "@p3" && (int)p.Value == 1); Assert.Contains(dbFilter.Parameters, p => p.ParameterName == "@p4" && (int)p.Value == 2); Assert.Contains(dbFilter.Parameters, p => p.ParameterName == "@p5" && (int)p.Value == 3); Assert.Contains(dbFilter.Parameters, p => p.ParameterName == "@p6" && (DateTime)p.Value == DateTime.Today); Assert.Contains(dbFilter.Parameters, p => p.ParameterName == "@p7" && (DateTime)p.Value == DateTime.Today.AddDays(7)); }
public IEnumerable<Post> Find(int page, int size, PostFilter filter = null) { var builder = new SqlBuilder(); var selector = builder.AddTemplate(PostQuery.GetManyPosts()); if(filter != null) { builder.Where(SqlFilterGenerator.GenerateSql(filter)); } return this.connection.Query<Post>(PostQuery.GetManyPosts(), new { PageIndex = page - 1, PageSize = size }, this.transaction); }