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\")))" ); }
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"), }); }
public FilterLambdaOperatorParameters CreateFilter(ItemFilterGroupDescriptor descriptor, Type modelType, object entity) => CreateItemFilterHelper.CreateFilter(descriptor, modelType, entity);