public void TestDynamicProjection() { var data = new List <Model> { new Model() { Id = 1, Name = "Name1" }, new Model() { Id = 2, Name = "Name2" }, new Model() { Id = 3, Name = "Name3" }, }; var dp = new ProjectionBuilder(typeof(Model), null) .Auto("Active") .Member("Id", map => map .FromExpression("Id")) .Member("Descr", map => map .FromExpression("Name")) .Member("CodeDescr", map => map .FromExpression("Id.ToString() + \" - \" + Name")) .Member("Constant", map => map .FromValue(5)) .BuildWithDynamicType("DynamicProjectionTestDto"); var predicateTreeBuilder = new PredicateTreeBuilder(typeof(Model)) .Has("Id", ExpressionOperator.Equals, 1) .Or("CodeDescr", ExpressionOperator.IsNotNullOrEmpty, null) .Or("Descr.Length", ExpressionOperator.GreaterThan, 1) .Or("Active", ExpressionOperator.DoesNotEqual, false); var q = dp.BuildQuery( data.AsQueryable(), new[] { "Id", "Descr" }, predicateTreeBuilder.RootNode) .ToList(); }
public void Can_Project_From_Object_To_Type_Using_Ctor() { var source = new[] { new { Prop1 = 1, Prop2 = "1", Active = true }, new { Prop1 = 2, Prop2 = "2", Active = false }, new { Prop1 = 3, Prop2 = "3", Active = true }, }; var sourceElement = source.First(); var projection = new ProjectionBuilder(source.First().GetType(), typeof(Model)) .Member(nameof(Model.Id), map => map .UsingCtorParameter(nameof(Model.Id).ToLower()) .FromExpression(nameof(sourceElement.Prop1))) .CtorParameter(nameof(Model.Name).ToLower(), map => map .FromExpression(nameof(sourceElement.Prop2))) .CtorParameter(nameof(Model.Active).ToLower(), map => map .FromExpression(nameof(sourceElement.Active))) .Build(); var result = projection .BuildQuery(source.AsQueryable()) .ToList(); var expectedResult = new List <Model> { new Model() { Id = 1, Name = "1", Active = true }, new Model() { Id = 2, Name = "2", Active = false }, new Model() { Id = 3, Name = "3", Active = true }, } .ToExpectedObject(); expectedResult.ShouldEqual(result.Cast <Model>().ToList()); }