Esempio n. 1
0
        private FilterInfo GetOneFilterInfo(List <FilterInfo> filterInfos)
        {
            var trimItems = filterInfos.TrimNotNull().ToArray();

            return(trimItems.Length switch
            {
                0 => null,
                1 => trimItems.First(),
                _ => FilterInfo.CreateAnd(trimItems)
            });
Esempio n. 2
0
        public void ShouldReturnStringExpressionWhenToString()
        {
            var filter = FilterInfo.CreateOr(
                FilterInfo.CreateAnd(
                    new FilterInfo("Age", FilterType.GreaterThan, 1),
                    new FilterInfo("Name", FilterType.StartsWith, "Zhang")),
                FilterInfo.CreateAnd(
                    new FilterInfo("Id", FilterType.In, new[] { 1, 3, 4 }),
                    new FilterInfo("Tel", FilterType.Contains, "135")));

            Assert.AreEqual("((Age > 1) and (Name starts \"Zhang\")) or ((Id in [1,3,4]) and (Tel contains \"135\"))", filter.ToString());
            Assert.AreEqual("((Age <= 1) or (Name not starts \"Zhang\")) and ((Id not in [1,3,4]) or (Tel not contains \"135\"))", filter.Not().ToString());
        }
Esempio n. 3
0
        public void ShouldAppendItemsWhenAndAlsoAndGivenOpTypeIsAndItemsAndOtherOpTypeIsAndItems()
        {
            var filter = FilterInfo.CreateItem("Age", FilterType.GreaterThan, 1)
                         .AndAlso("Name", FilterType.StartsWith, "Zhang");

            Assert.AreEqual(OpType.AndItems, filter.OpType);
            Assert.AreEqual(2, filter.Items.Count);
            var otherAndItems = FilterInfo.CreateAnd(
                new FilterInfo("Id", FilterType.StartsWith, "0"),
                new FilterInfo("Tel", FilterType.Contains, "135"));

            filter.AndAlso(otherAndItems);
            Assert.AreEqual(OpType.AndItems, filter.OpType);
            Assert.AreEqual(4, filter.Items.Count);
        }
Esempio n. 4
0
        public override Expression ConvertValue(Expression p, PropertyInfo propInfo, object value,
                                                List <FilterInfo> subFilters)
        {
            var trimFilters = subFilters.TrimNotNull().ToList();

            if (trimFilters.Count == 0)
            {
                var(_, propType) = propInfo.PropertyType.GetUnderlyingTypeTypeInfo();
                var subType = propType.GetEnumerableSubType();
                return(Expression.Call(AnyMethod0.MakeGenericMethod(subType), Expression.Property(p, propInfo)));
            }
            if (trimFilters.Count == 1)
            {
                return(CreateAnyMethod1Expression(p, propInfo, trimFilters.First()));
            }
            else
            {
                return(CreateAnyMethod1Expression(p, propInfo, FilterInfo.CreateAnd(trimFilters.ToArray())));
            }
        }
Esempio n. 5
0
        public void ShouldConvertToStringAndConvertFromString()
        {
            var filter = FilterInfo.CreateOr(
                FilterInfo.CreateAnd(
                    new FilterInfo("Age", FilterType.GreaterThan, 1),
                    new FilterInfo("Name", FilterType.StartsWith, "Zhang")),
                FilterInfo.CreateAnd(
                    new FilterInfo("Id", FilterType.StartsWith, "0"),
                    new FilterInfo("Tel", FilterType.Contains, "135")));
            var converter = System.ComponentModel.TypeDescriptor.GetConverter(typeof(FilterInfo));

            Assert.IsTrue(converter.CanConvertTo(typeof(string)));
            Assert.IsTrue(converter.CanConvertFrom(typeof(string)));
            var plainText = converter.ConvertTo(filter, typeof(string)) as string;

            Assert.IsNotNull(plainText);
            var filter2 = converter.ConvertFrom(plainText) as FilterInfo;

            Assert.AreEqual(OpType.OrItems, filter2.OpType);
            Assert.AreEqual(2, filter2.Items.Count);
        }