almost ready to support more complex filtering.
This commit is contained in:
		
							parent
							
								
									bd213f8b3f
								
							
						
					
					
						commit
						507b64c34b
					
				| @ -2,10 +2,13 @@ | ||||
| using PoweredSoft.DynamicLinq.Dal.Pocos; | ||||
| using PoweredSoft.DynamicLinq.Extensions; | ||||
| using PoweredSoft.DynamicLinq.Fluent; | ||||
| using PoweredSoft.DynamicLinq.Helpers; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Data.SqlClient; | ||||
| using System.Linq; | ||||
| using System.Linq.Expressions; | ||||
| using System.Reflection; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
| 
 | ||||
| @ -95,5 +98,131 @@ namespace PoweredSoft.DynamicLinq.Test | ||||
|             Assert.IsTrue(first.Id == 3); | ||||
|             Assert.IsTrue(second.Id == 1); | ||||
|         } | ||||
| 
 | ||||
|         //[TestMethod] | ||||
|         //public void Test() | ||||
|         //{ | ||||
|         //    var authors = new List<Author>() | ||||
|         //    { | ||||
|         //        new Author | ||||
|         //        { | ||||
|         //            Id = 1, | ||||
|         //            FirstName = "David", | ||||
|         //            LastName = "Lebee", | ||||
|         //            Posts = new List<Post> | ||||
|         //            { | ||||
|         //                new Post | ||||
|         //                { | ||||
|         //                    Id = 1, | ||||
|         //                    AuthorId = 1, | ||||
|         //                    Title = "Match", | ||||
|         //                    Content = "ABC", | ||||
|         //                    Comments = new List<Comment>() | ||||
|         //                    { | ||||
|         //                        new Comment() | ||||
|         //                        { | ||||
|         //                            Id = 1, | ||||
|         //                            DisplayName = "John Doe", | ||||
|         //                            CommentText = "!@#$!@#!@#", | ||||
|         //                            Email = "John.doe@me.com" | ||||
|         //                        } | ||||
|         //                    } | ||||
|         //                }, | ||||
|         //                new Post | ||||
|         //                { | ||||
|         //                    Id = 2, | ||||
|         //                    AuthorId = 1, | ||||
|         //                    Title = "Match", | ||||
|         //                    Content = "ABC" | ||||
|         //                } | ||||
|         //            } | ||||
|         //        }, | ||||
|         //        new Author | ||||
|         //        { | ||||
|         //            Id = 2, | ||||
|         //            FirstName = "Chuck", | ||||
|         //            LastName = "Norris", | ||||
|         //            Posts = new List<Post> | ||||
|         //            { | ||||
|         //                new Post | ||||
|         //                { | ||||
|         //                    Id = 3, | ||||
|         //                    AuthorId = 2, | ||||
|         //                    Title = "Match", | ||||
|         //                    Content = "ASD", | ||||
|         //                }, | ||||
|         //                new Post | ||||
|         //                { | ||||
|         //                    Id = 4, | ||||
|         //                    AuthorId = 2, | ||||
|         //                    Title = "DontMatch", | ||||
|         //                    Content = "ASD", | ||||
|         //                } | ||||
|         //            } | ||||
|         //        } | ||||
|         //    }; | ||||
| 
 | ||||
|         //    // the query. | ||||
|         //    var query = authors.AsQueryable(); | ||||
| 
 | ||||
|         //    //// first recursion. | ||||
|         //    //var typeOfClass = typeof(Author); | ||||
|         //    //var parameter = Expression.Parameter(typeOfClass, "t"); | ||||
|         //    //var posts = Expression.PropertyOrField(parameter, "Posts"); | ||||
| 
 | ||||
|         //    //// second recursion | ||||
|         //    //{ | ||||
|         //    //    var subListType = posts.Type.GetGenericArguments().First(); | ||||
| 
 | ||||
|         //    //    var innerParam = Expression.Parameter(subListType, "t2"); | ||||
|         //    //    var field = Expression.PropertyOrField(innerParam, "Title"); | ||||
|         //    //    var innerCondition = PoweredSoft.DynamicLinq.Helpers.QueryableHelpers.GetConditionExpressionForMember(innerParam, field, ConditionOperators.Equal, Expression.Constant("Match")); | ||||
|         //    //    var lambda = Expression.Lambda(innerCondition, innerParam); | ||||
| 
 | ||||
|         //    //    // any | ||||
|         //    //    var anyMethod = typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public).First(t => t.Name == "All" && t.GetParameters().Count() == 2); | ||||
|         //    //    var genericAnyMethod = anyMethod.MakeGenericMethod(subListType); | ||||
|         //    //    var subExpression = Expression.Call(genericAnyMethod, posts, lambda); | ||||
| 
 | ||||
|         //    //    var finalLambda = Expression.Lambda<Func<Author, bool>>(subExpression, parameter); | ||||
|         //    //    query = query.Where(finalLambda); | ||||
|         //    //} | ||||
| 
 | ||||
|         //    var anyMethod = typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public).First(t => t.Name == "Any" && t.GetParameters().Count() == 2); | ||||
| 
 | ||||
|         //    // first recursion. | ||||
|         //    var typeOfClass = typeof(Author); | ||||
|         //    var parameter = Expression.Parameter(typeOfClass, "t"); | ||||
|         //    var posts = Expression.PropertyOrField(parameter, "Posts"); | ||||
| 
 | ||||
|         //    // second recursion | ||||
|         //    { | ||||
|         //        var subListType = posts.Type.GetGenericArguments().First(); | ||||
| 
 | ||||
|         //        var innerParam = Expression.Parameter(subListType, "t2"); | ||||
|         //        var field = Expression.PropertyOrField(innerParam, "Comments"); | ||||
| 
 | ||||
|         //        // any | ||||
|         //        var genericAnyMethod = anyMethod.MakeGenericMethod(subListType); | ||||
| 
 | ||||
|         //        // third recursion | ||||
|         //        { | ||||
|         //            var innerParam2 = Expression.Parameter(typeof(Comment), "t3"); | ||||
|         //            var field2 = Expression.PropertyOrField(innerParam2, "Id"); | ||||
|         //            var innerCondition2 = QueryableHelpers.GetConditionExpressionForMember(innerParam2, field2, ConditionOperators.Equal, Expression.Constant(1L)); | ||||
|         //            var lambda = Expression.Lambda(innerCondition2, innerParam2); | ||||
| 
 | ||||
|         //            var generateAnyMethod2 = anyMethod.MakeGenericMethod(typeof(Comment)); | ||||
|         //            var subExpression2 = Expression.Call(generateAnyMethod2, field, lambda); | ||||
| 
 | ||||
|         //            var previousLambda = Expression.Lambda<Func<Post, bool>>(subExpression2, innerParam); | ||||
| 
 | ||||
|         //            var subExpression = Expression.Call(genericAnyMethod, posts, previousLambda); | ||||
| 
 | ||||
|         //            var finalLambda = Expression.Lambda<Func<Author, bool>>(subExpression, parameter); | ||||
|         //            query = query.Where(finalLambda); | ||||
|         //        } | ||||
|         //    } | ||||
|         //} | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user