Exemplo n.º 1
0
 public static FilterLambdaOperatorParameters CreateFilter(ItemFilterGroupDescriptor descriptor, Type modelType, object entity)
 => new FilterLambdaOperatorParameters
 (
     CreateFilterGroupBody(descriptor, entity),
     modelType,
     parameterName
 );
        public void CanCreateSerachByIdExpression()
        {
            //arrange
            ItemFilterGroupDescriptor itemFilterGroupDescriptor = new ItemFilterGroupDescriptor
            {
                Filters = new List <ItemFilterDescriptorBase>
                {
                    new MemberSourceFilterDescriptor
                    {
                        Field        = "UserId",
                        MemberSource = "UserId",
                        Operator     = "eq",
                        Type         = "System.Int32"
                    }
                }
            };

            //act
            FilterLambdaOperatorParameters filterLambdaOperatorDescriptor = serviceProvider.GetRequiredService <IGetItemFilterBuilder>().CreateFilter
                                                                            (
                itemFilterGroupDescriptor,
                typeof(ResidencyModel),
                residency
                                                                            );

            FilterLambdaOperator filterLambdaOperator        = (FilterLambdaOperator)serviceProvider.GetRequiredService <IMapper>().MapToOperator(filterLambdaOperatorDescriptor);
            Expression <Func <ResidencyModel, bool> > filter = (Expression <Func <ResidencyModel, bool> >)filterLambdaOperator.Build();

            //assert
            AssertFilterStringIsCorrect
            (
                filter,
                "f => (f.UserId == 3)"
            );
        }
        public void CanCreateSerachByIdAndFirstNameAndLastNameExpression()
        {
            //arrange
            ItemFilterGroupDescriptor itemFilterGroupDescriptor = new ItemFilterGroupDescriptor
            {
                Filters = new List <ItemFilterDescriptorBase>
                {
                    new MemberSourceFilterDescriptor
                    {
                        Field        = "UserId",
                        MemberSource = "UserId",
                        Operator     = "eq",
                        Type         = "System.Int32"
                    },
                    new ItemFilterGroupDescriptor
                    {
                        Filters = new List <ItemFilterDescriptorBase>
                        {
                            new MemberSourceFilterDescriptor
                            {
                                Field        = "CitizenshipStatus",
                                MemberSource = "CitizenshipStatus",
                                Operator     = "eq",
                                Type         = "System.String"
                            },
                            new MemberSourceFilterDescriptor
                            {
                                Field        = "ResidentState",
                                MemberSource = "ResidentState",
                                Operator     = "eq",
                                Type         = "System.String"
                            }
                        },
                        Logic = "and"
                    }
                },
                Logic = "and"
            };

            //act
            FilterLambdaOperatorParameters filterLambdaOperatorDescriptor = serviceProvider.GetRequiredService <IGetItemFilterBuilder>().CreateFilter
                                                                            (
                itemFilterGroupDescriptor,
                typeof(ResidencyModel),
                residency
                                                                            );

            FilterLambdaOperator filterLambdaOperator        = (FilterLambdaOperator)serviceProvider.GetRequiredService <IMapper>().MapToOperator(filterLambdaOperatorDescriptor);
            Expression <Func <ResidencyModel, bool> > filter = (Expression <Func <ResidencyModel, bool> >)filterLambdaOperator.Build();

            //assert
            AssertFilterStringIsCorrect
            (
                filter,
                "f => ((f.UserId == 3) AndAlso ((f.CitizenshipStatus == \"US\") AndAlso (f.ResidentState == \"OH\")))"
            );
        }
        public void CanCreateSerachByIdAndFirstNameAndLastNameExpression()
        {
            //arrange
            ItemFilterGroupDescriptor itemFilterGroupDescriptor = new ItemFilterGroupDescriptor
            {
                Filters = new List <ItemFilterDescriptorBase>
                {
                    new MemberSourceFilterDescriptor
                    {
                        Field        = "ID",
                        MemberSource = "ID",
                        Operator     = "eq",
                        Type         = "System.Int32"
                    },
                    new ItemFilterGroupDescriptor
                    {
                        Filters = new List <ItemFilterDescriptorBase>
                        {
                            new MemberSourceFilterDescriptor
                            {
                                Field        = "FirstName",
                                MemberSource = "FirstName",
                                Operator     = "eq",
                                Type         = "System.String"
                            },
                            new MemberSourceFilterDescriptor
                            {
                                Field        = "LastName",
                                MemberSource = "LastName",
                                Operator     = "eq",
                                Type         = "System.String"
                            }
                        },
                        Logic = "and"
                    }
                },
                Logic = "and"
            };

            //act
            FilterLambdaOperatorParameters filterLambdaOperatorDescriptor = serviceProvider.GetRequiredService <IGetItemFilterBuilder>().CreateFilter
                                                                            (
                itemFilterGroupDescriptor,
                typeof(InstructorModel),
                inststructor
                                                                            );

            FilterLambdaOperator filterLambdaOperator         = (FilterLambdaOperator)serviceProvider.GetRequiredService <IMapper>().MapToOperator(filterLambdaOperatorDescriptor);
            Expression <Func <InstructorModel, bool> > filter = (Expression <Func <InstructorModel, bool> >)filterLambdaOperator.Build();

            //assert
            AssertFilterStringIsCorrect
            (
                filter,
                "f => ((f.ID == 3) AndAlso ((f.FirstName == \"John\") AndAlso (f.LastName == \"Smith\")))"
            );
        }
Exemplo n.º 5
0
        private static IExpressionParameter CreateFilterGroupBody(ItemFilterGroupDescriptor descriptor, object entity)
        {
            if (descriptor?.Filters?.Any() != true)
            {
                throw new ArgumentException($"{nameof(descriptor.Filters)}: 165BB6D3-1D2F-4EEB-B546-102825505ED2");
            }

            if (descriptor.Filters.Count > 2)
            {
                throw new ArgumentException($"{nameof(descriptor.Filters)}: 1EAC3591-1BBE-412A-A915-C779E3463FB7");
            }

            if (descriptor.Filters.Count == 1)
            {
                return(CreateBody(descriptor.Filters.First()));
            }
            ;

            return(SetMembers
                   (
                       GetLogicBinaryOperatorDescriptor(descriptor.Logic)
                   ));

            IExpressionParameter SetMembers(BinaryOperatorParameters binaryOperator)
            {
                binaryOperator.Left  = CreateBody(descriptor.Filters.First());
                binaryOperator.Right = CreateBody(descriptor.Filters.Last());

                return(binaryOperator);
            }

            IExpressionParameter CreateBody(ItemFilterDescriptorBase filterDescriptorBase)
            {
                return(filterDescriptorBase switch
                {
                    ValueSourceFilterDescriptor valueSourceFilterDescriptor => CreateValueFilterBody(valueSourceFilterDescriptor),
                    MemberSourceFilterDescriptor memberSourceFilterDescriptor => CreateMemberSourceFilterBody(memberSourceFilterDescriptor, entity),
                    ItemFilterGroupDescriptor itemFilterGroupDescriptor => CreateFilterGroupBody(itemFilterGroupDescriptor, entity),
                    _ => throw new ArgumentException($"{nameof(filterDescriptorBase)}: 7EB79C70-91D4-4C9E-96AD-C5ABF1D8603A"),
                });
            }
Exemplo n.º 6
0
 public FilterLambdaOperatorParameters CreateFilter(ItemFilterGroupDescriptor descriptor, Type modelType, object entity)
 => CreateItemFilterHelper.CreateFilter(descriptor, modelType, entity);