protected override Expression VisitProjection(ProjectionExpression projection) { LambdaExpression subQuery = Expression.Lambda(base.VisitProjection(projection), this.documentParameter); Type elementType = TypeSystem.GetElementType(subQuery.Body.Type); MethodInfo mi = miExecuteSubQuery.MakeGenericMethod(elementType); return Expression.Convert(Expression.Call(this.documentParameter, mi, Expression.Constant(subQuery)), projection.Type); }
protected virtual Expression VisitProjection(ProjectionExpression proj) { SelectExpression source = (SelectExpression)this.Visit(proj.Source); Expression projector = this.Visit(proj.Projector); if (source != proj.Source || projector != proj.Projector) { return new ProjectionExpression(source, projector); } return proj; }
public ElementAtExpression(ProjectionExpression proj, Expression indexExpression) : base(proj.Source, proj.Projector) { this.Index = indexExpression; }
public CountExpression(ProjectionExpression proj) : base(proj.Source, proj.Projector) { }
internal TakeExpression(ProjectionExpression proj, Expression skipAmount, Expression takeAmount) : base(proj,skipAmount) { this.TakeAmount = takeAmount; }
public SkipExpression(ProjectionExpression proj, Expression skipAmount) : base(proj.Source, proj.Projector) { this.SkipAmount = skipAmount; }