advancing well to be continued.
This commit is contained in:
		
							parent
							
								
									13576133b5
								
							
						
					
					
						commit
						2bd292f18d
					
				| @ -44,7 +44,7 @@ namespace PoweredSoft.DynamicLinq.ConsoleApp | ||||
|         public static void Case2() | ||||
|         { | ||||
|             // the expression parser. | ||||
|             var ep = new ExpressionParser(typeof(Post), "Author.Posts.Author.FirstName"); | ||||
|             var ep = new ExpressionParser(typeof(Post), "Author.Posts.Author.Posts.Author.FirstName"); | ||||
| 
 | ||||
|             new List<Post>().AsQueryable().Select(t => new | ||||
|             { | ||||
| @ -111,8 +111,8 @@ namespace PoweredSoft.DynamicLinq.ConsoleApp | ||||
|             } | ||||
|             else if (piece.Parent.IsGenericEnumerable) | ||||
|             { | ||||
|                 var indexOfPiece = Parser.Pieces.IndexOf(piece); | ||||
|                 var currentSimpleChain = Parser.Pieces.Skip(indexOfPiece - 1).Where(t => !t.IsGenericEnumerable).ToList(); | ||||
|                 var indexOfParentPiece = Parser.Pieces.IndexOf(piece); | ||||
|                 var currentSimpleChain = Parser.Pieces.Skip(indexOfParentPiece).TakeWhile(t => !t.IsGenericEnumerable).ToList();      | ||||
|                 var parameter = ResolveParameter(currentSimpleChain); | ||||
|                 var currentSimpleChainExpression = BuildSimpleChainExpression(currentSimpleChain, parameter); | ||||
|                 var currentSimpleChainExpressionLambda = Expression.Lambda(currentSimpleChainExpression, parameter); | ||||
| @ -121,24 +121,24 @@ namespace PoweredSoft.DynamicLinq.ConsoleApp | ||||
|                 var left = RecursiveSelect(piece.Parent); | ||||
| 
 | ||||
|                 // the parent. | ||||
|                 var parent = Expression.PropertyOrField(left, piece.Parent.Name) as Expression; | ||||
|                 var parentExpression = Expression.PropertyOrField(left, piece.Parent.Name) as Expression; | ||||
| 
 | ||||
|                 if (NullChecking != SelectNullHandling.LeaveAsIs) | ||||
|                 { | ||||
|                     var nullCheckParameter = ResolveParameter(currentSimpleChain); | ||||
|                     var nullCheckConditionExpression = BuildNullCheckConditionExpression(currentSimpleChain, nullCheckParameter); | ||||
|                     var whereExpression = Expression.Call(typeof(Enumerable), "Where", new[] { piece.Parent.EnumerableType }, parent, nullCheckConditionExpression); | ||||
|                     parent = whereExpression as Expression; | ||||
|                     var whereExpression = Expression.Call(typeof(Enumerable), "Where", new[] { piece.Parent.EnumerableType }, parentExpression, nullCheckConditionExpression); | ||||
|                     parentExpression = whereExpression as Expression; | ||||
|                 } | ||||
| 
 | ||||
|                 // select. | ||||
|                 var allPiecesAttached = Expression.Call(typeof(Enumerable), | ||||
|                 var gluedTogetherExpression = Expression.Call(typeof(Enumerable), | ||||
|                     "Select", | ||||
|                     new Type[] { piece.Parent.EnumerableType, currentSimpleChainExpression.Type }, | ||||
|                     parent, currentSimpleChainExpressionLambda); | ||||
|                     parentExpression, currentSimpleChainExpressionLambda); | ||||
| 
 | ||||
|                 // add current to parent? | ||||
|                 return allPiecesAttached; | ||||
|                 return gluedTogetherExpression; | ||||
|             } | ||||
| 
 | ||||
|             // skip. | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user