Ejemplo n.º 1
0
        private static void TestCase(DFilterExtension <Person, Filter> ins, IQueryable <Person> source, string filters)
        {
            try
            {
                var f = JsonSerializer.Deserialize <List <Filter> >(filters).AsQueryable();

                Console.WriteLine(string.Format(@"Filter detail : Type = [{0}] Operator = [{1}]", f.FirstOrDefault().Type, String.Join(" and ", f.Select(s => s.Operator))));

                var rs = ins.Filterable(source, filters);

                Console.WriteLine(String.Format(@"Found : {0} result", rs.Count()));
            }catch (Exception ex)
            {
                Console.WriteLine(String.Format(@"Error case : {0} with error : {1}", filters, ex.Message));
            }
        }
Ejemplo n.º 2
0
        public static void Main(string[] args)
        {
            String file_path = AppDomain.CurrentDomain.BaseDirectory + "data.json";

            if (!File.Exists(file_path))
            {
                throw new Exception("data.json not exists!");
            }

            String dataSource = "";//= JsonSerializer.Serialize<List<Person>>(new List<Person>(){});

            using (StreamReader sr = File.OpenText(file_path))
            {
                string l;
                while ((l = sr.ReadLine()) != null)
                {
                    dataSource += l.Trim();
                }
            }

            /// <summary>
            /// String filter_equal = "[{\"Type\" : \"text\",\"Key\" : \"Name\",\"Operator\" : \"equal\",\"Value\" : \"Woodard Coffey\"}]";
            /// </summary>

            #region filter text

            String filter_equal = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.text,
                    Key      = "Name",
                    Operator = CompareTypeConst.equal,
                    Value    = "Mann Newton"
                }
            });

            String filter_not_equal = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.text,
                    Key      = "Name",
                    Operator = CompareTypeConst.notEqual,
                    Value    = "Mann Newton"
                }
            });

            String filter_include = "[{\"Type\" : \"text\",\"Key\" : \"Name\",\"Operator\" : \"include\",\"Value\" : \"a\"}]";

            String filter_not_include = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.text,
                    Operator = CompareTypeConst.notInclude,
                    Key      = "Name",
                    Value    = "a"
                }
            });

            String filter_not_support_case = "[{\"Type\" : \"text\",\"Key\" : \"Name\",\"Operator\" : \"lessThan\",\"Value\" : \"a\"}]";

            #endregion

            #region filter number

            String number_filter_not_equal = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.integerNumber,
                    Operator = CompareTypeConst.equal,
                    Key      = "Age",
                    Value    = "49"
                },
                new Filter()
                {
                    Type     = FieldTypeConst.integerNumber,
                    Operator = CompareTypeConst.greaterThanOrEqual,
                    Key      = "Age",
                    Value    = "49"
                }
            });

            String number_filter_range = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.integerNumber,
                    Operator = CompareTypeConst.greaterThanOrEqual,
                    Key      = "Age",
                    Value    = "36"
                },
                new Filter()
                {
                    Type     = FieldTypeConst.integerNumber,
                    Operator = CompareTypeConst.lessThanOrEqual,
                    Key      = "Age",
                    Value    = "55"
                }
            });

            string number_decimal_filter_equal = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.decimalNumber,
                    Operator = CompareTypeConst.equal,
                    Key      = "Amount",
                    Value    = "81236.1418736223"
                },
                new Filter()
                {
                    Type     = FieldTypeConst.decimalNumber,
                    Operator = CompareTypeConst.notEqual,
                    Key      = "Amount",
                    Value    = "427368.6921921577"
                }
            });

            string number_decimal_filter_range = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.decimalNumber,
                    Operator = CompareTypeConst.greaterThanOrEqual,
                    Key      = "Amount",
                    Value    = "271421.5981646036"
                },
                new Filter()
                {
                    Type     = FieldTypeConst.decimalNumber,
                    Operator = CompareTypeConst.lessThanOrEqual,
                    Key      = "Amount",
                    Value    = "729774.7005211266"
                }
            });

            string number_decimal_filter_range2 = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.decimalNumber,
                    Operator = CompareTypeConst.fromTo,
                    Key      = "Amount",
                    Start    = "419538.2190820557",
                    End      = "988957.9193887961"
                }
            });

            string number_decimal_filter_range_with_equal = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.decimalNumber,
                    Operator = CompareTypeConst.fromToWithEqual,
                    Key      = "Amount",
                    Start    = "419538.2190820557",
                    End      = "988957.9193887961"
                }
            });

            #endregion

            #region datetime

            String datetime_filter_equal = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.date,
                    Operator = CompareTypeConst.equal,
                    Key      = "DOB",
                    Value    = "2001-04-15T20:03:37+00:00" //new DateTime(2001,4,15,20,3,37).ToString()
                }
            });

            String datetime_filter_range = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.date,
                    Operator = CompareTypeConst.greaterThan,
                    Key      = "DOB",
                    Value    = "2001-04-15T20:03:37+00:00" //new DateTime(2001,4,15,20,3,37).ToString()
                },
                new Filter()
                {
                    Type     = FieldTypeConst.date,
                    Operator = CompareTypeConst.lessThanOrEqual,
                    Key      = "DOB",
                    Value    = "2017-09-09T04:41:07+00:00" //new DateTime(2001,4,15,20,3,37).ToString()
                }
            });

            string datetime_filter_range2 = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.date,
                    Operator = CompareTypeConst.fromTo,
                    Key      = "DOB",
                    Start    = "1993-08-22T08:30:42+00:00",
                    End      = "2006-02-27T02:12:58+00:00"
                }
            });

            string datetime_filter_range_with_equal = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.date,
                    Operator = CompareTypeConst.fromToWithEqual,
                    Key      = "DOB",
                    Start    = "1993-08-22T08:30:42+00:00",
                    End      = "2006-02-27T02:12:58+00:00"
                }
            });

            #endregion

            string batch_value_filter = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.text,
                    Operator = CompareTypeConst.equal,
                    Key      = "Name",
                    Values   = new List <string>()
                    {
                        "Ana Bowers",
                        "Hull Forbes"
                    }
                }
            });

            string batch_value_not_equal_filter = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.text,
                    Operator = CompareTypeConst.notEqual,
                    Key      = "Name",
                    Values   = new List <string>()
                    {
                        "Ana Bowers",
                        "Hull Forbes"
                    }
                }
            });

            string batch_value_include_filter = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.text,
                    Operator = CompareTypeConst.include,
                    Key      = "Name",
                    Values   = new List <string>()
                    {
                        "a",
                        "Hull"
                    }
                }
            });

            string batch_value_not_include_filter = JsonSerializer.Serialize <List <Filter> >(new List <Filter>()
            {
                new Filter()
                {
                    Type     = FieldTypeConst.text,
                    Operator = CompareTypeConst.notInclude,
                    Key      = "Name",
                    Values   = new List <string>()
                    {
                        "Hull",
                        "Forbes"
                    }
                }
            });

            IQueryable <Person> source = JsonSerializer.Deserialize <List <Person> >(dataSource).AsQueryable();

            Console.WriteLine("Start Testing!");

            Console.WriteLine(String.Format(@"DataSource : {0} item", source.Count()));

            var ins = new DFilterExtension <Person, Filter>();

            Console.WriteLine("-------note that currently im going testing with 1 filter each-------");

            BreakSomeLine("Testing text");

            foreach (var f in new List <string>()
            {
                filter_equal, filter_not_equal,
                filter_include, filter_not_include,
                filter_not_support_case,
            })
            {
                TestCase(ins, source, f);
            }
            ;

            BreakSomeLine("Testing number");

            foreach (var f in new List <string>()
            {
                number_filter_not_equal,
                number_filter_range,
                number_decimal_filter_equal,
                number_decimal_filter_range,
                number_decimal_filter_range2,
                number_decimal_filter_range_with_equal
            })
            {
                TestCase(ins, source, f);
            }
            ;

            BreakSomeLine("Testing datetime");

            foreach (var f in new List <string>()
            {
                datetime_filter_equal,
                datetime_filter_range,
                datetime_filter_range2,
                datetime_filter_range_with_equal
            })
            {
                TestCase(ins, source, f);
            }
            ;

            BreakSomeLine("Batch compare");

            foreach (var f in new List <string>()
            {
                batch_value_filter,
                batch_value_not_equal_filter,
                batch_value_include_filter,
                batch_value_not_include_filter
            })
            {
                TestCase(ins, source, f);
            }
            ;

            Console.ReadKey();
        }