public void ParseLambda_Complex_1() { // Arrange var testList = User.GenerateSampleModels(51); var qry = testList.AsQueryable(); var externals = new Dictionary <string, object> { { "Users", qry } }; // Act string query = "Users.GroupBy(x => new { x.Profile.Age }).OrderBy(gg => gg.Key.Age).Select(j => new (j.Key.Age, j.Sum(k => k.Income) As TotalIncome))"; LambdaExpression expression = DynamicExpressionParser.ParseLambda(null, query, externals); Delegate del = expression.Compile(); IEnumerable <dynamic> result = del.DynamicInvoke() as IEnumerable <dynamic>; var expected = qry.GroupBy(x => new { x.Profile.Age }).OrderBy(gg => gg.Key.Age).Select(j => new { j.Key.Age, TotalIncome = j.Sum(k => k.Income) }).Select(c => new ComplexParseLambda1Result { Age = c.Age, TotalIncome = c.TotalIncome }).Cast <dynamic>().ToArray(); // Assert Check.That(result).IsNotNull(); Check.That(result).HasSize(expected.Length); Check.That(result.ToArray()[0]).Equals(expected[0]); }
public void ParseLambda_Complex_3() { var config = new ParsingConfig { CustomTypeProvider = new TestCustomTypeProvider() }; // Arrange var testList = User.GenerateSampleModels(51); var qry = testList.AsQueryable(); var externals = new Dictionary <string, object> { { "Users", qry } }; // Act string stringExpression = "Users.GroupBy(x => new { x.Profile.Age }).OrderBy(gg => gg.Key.Age).Select(j => new System.Linq.Dynamic.Core.Tests.DynamicExpressionParserTests+ComplexParseLambda3Result{j.Key.Age, j.Sum(k => k.Income) As TotalIncome})"; LambdaExpression expression = DynamicExpressionParser.ParseLambda(config, null, stringExpression, externals); Delegate del = expression.Compile(); IEnumerable <dynamic> result = del.DynamicInvoke() as IEnumerable <dynamic>; var expected = qry.GroupBy(x => new { x.Profile.Age }).OrderBy(gg => gg.Key.Age) .Select(j => new ComplexParseLambda3Result { Age = j.Key.Age, TotalIncome = j.Sum(k => k.Income) }) .Cast <dynamic>().ToArray(); // Assert Check.That(result).IsNotNull(); Check.That(result).HasSize(expected.Length); Check.That(result.ToArray()[0]).Equals(expected[0]); }
public void ParseLambda_ToList() { // Arrange var testList = User.GenerateSampleModels(51); var qry = testList.AsQueryable(); // Act string query = "OrderBy(gg => gg.Income).ToList()"; LambdaExpression expression = DynamicExpressionParser.ParseLambda(qry.GetType(), null, query); Delegate del = expression.Compile(); IEnumerable <dynamic> result = del.DynamicInvoke(qry) as IEnumerable <dynamic>; var expected = qry.OrderBy(gg => gg.Income).ToList(); // Assert Check.That(result).IsNotNull(); Check.That(result).HasSize(expected.Count); Check.That(result.ToArray()[0]).Equals(expected[0]); }
public void ParseLambda_Select_2() { // Arrange var testList = User.GenerateSampleModels(5); var qry = testList.AsQueryable(); var externals = new Dictionary <string, object> { { "Users", qry } }; // Act string query = "Users.Select(j => j)"; LambdaExpression expression = DynamicExpressionParser.ParseLambda(null, query, externals); Delegate del = expression.Compile(); object result = del.DynamicInvoke(); // Assert Assert.NotNull(result); }
public void GroupByAndSelect_TestDynamicSelectMember() { //Arrange var testList = User.GenerateSampleModels(51); var qry = testList.AsQueryable(); //Act var byAgeReturnAllReal = qry.GroupBy(x => new { x.Profile.Age }); var groupReal = byAgeReturnAllReal.OrderBy(gg => gg.Key.Age).ToList(); var byAgeReturnAll = qry.GroupBy("new (Profile.Age)"); var group = byAgeReturnAll.OrderBy("Key.Age").ToDynamicArray(); var selectQry = byAgeReturnAll.Select("new (Key.Age, Sum(Income) As TotalIncome)"); //Real Comparison var realQry = qry.GroupBy(x => new { x.Profile.Age }).Select(x => new { x.Key.Age, TotalIncome = x.Sum(y => y.Income) }); //Assert Assert.Equal(realQry.Count(), selectQry.Count()); #if NET35 Assert.Equal( realQry.Select(x => x.Age).ToArray(), selectQry.Cast <object>().Select(x => ((object)x).GetDynamicProperty <int?>("Age")).ToArray()); Assert.Equal( realQry.Select(x => x.TotalIncome).ToArray(), selectQry.Cast <object>().Select(x => ((object)x).GetDynamicProperty <int>("TotalIncome")).ToArray()); #else Assert.Equal( realQry.Select(x => x.Age).ToArray(), selectQry.AsEnumerable().Select(x => x.Age).Cast <int?>().ToArray()); Assert.Equal( realQry.Select(x => x.TotalIncome).ToArray(), selectQry.AsEnumerable().Select(x => x.TotalIncome).Cast <int>().ToArray()); #endif }