Beispiel #1
0
        public void Test_Spec()
        {
            var filter = new CustomerFilter
            {
                Any         = false,
                CustomerIds = new List <int> {
                    1, 2
                },
                CustomerName = "CustomerName_1",
                SortColumns  = new List <string> {
                    "CustomerId", "CustomerName "
                },
                Desc = false
            };

            var spec1 = new IfSpec("CustomerId in (@CustomerIds)", p => p["@CustomerIds"] = filter.CustomerIds);
            var spec2 = new IfSpec("CustomerName = @CustomerName", p => p["@CustomerName"] = filter.CustomerName);

            var and1Spec = new AndSpec(spec1, spec2);
            var and2Spec = new AndSpec(spec1, spec2);

            var orSpec = new OrSpec(and1Spec, and2Spec);

            var whereSpec = new WhereSpec(orSpec, "                        ");

            var selelctSpec = new CommaSpec(new string[] { "CustomerId", "CustomerName", "@param1 as param1" }, p => p["@param1"] = 1);
            var sortSpec    = new CommaSpec(filter.SortColumns, defaultPredicate: "CustomerId");

            string sql = $@"
                        select 
                            {selelctSpec}
                        from 
                            Customer
                        {whereSpec}
                        order by
                            {sortSpec} ";

            Console.Write(sql);

            using (var connection = _testInitializer.CreateConnection())
            {
                connection.Open();

                var customersCount = connection.Query("select * from Customer").Fetch().Count();

                var customers = connection
                                .Query <Customer>(sql)
                                .Params(p =>
                {
                    p.AddMap(whereSpec);
                    p.AddMap(selelctSpec);
                })
                                .Fetch()
                                .ToArray();

                Assert.AreEqual(1, customers.Count());

                connection.Close();
            }
        }
Beispiel #2
0
 public bool Equals(OrSpec other)
 {
     return(this.spec1.Equals(other.spec1) &&
            this.spec2.Equals(other.spec2));
 }