public IIncludableQuery <TEntity, TNavigation> AndWhere(Expression <Func <TNavigation, bool> > predicate) { IncludeExpression prevIncludeExpression = this.QueryExpression as IncludeExpression; NavigationNode startNavigation = prevIncludeExpression.NavigationNode.Clone(); NavigationNode lastNavigation = startNavigation.GetLast(); lastNavigation.Condition = lastNavigation.Condition.And(predicate); IncludeExpression includeExpression = new IncludeExpression(typeof(TEntity), prevIncludeExpression.PrevExpression, startNavigation); return(new IncludableQuery <TEntity, TNavigation>(this.DbContext, this.TrackEntity, includeExpression)); }
IncludeExpression BuildThenIncludeExpression(LambdaExpression navigationPath) { IncludeExpression prevIncludeExpression = this.QueryExpression as IncludeExpression; NavigationNode startNavigation = prevIncludeExpression.NavigationNode.Clone(); NavigationNode lastNavigation = startNavigation.GetLast(); List <MemberExpression> memberExps = ExtractMemberAccessChain(navigationPath); for (int i = 0; i < memberExps.Count; i++) { PropertyInfo member = memberExps[i].Member as PropertyInfo; NavigationNode navigation = InitNavigationNode(member, this.DbContext); lastNavigation.Next = navigation; lastNavigation = navigation; } IncludeExpression includeExpression = new IncludeExpression(typeof(TEntity), prevIncludeExpression.PrevExpression, startNavigation); return(includeExpression); }