//Detect and retrieve sub-query in local variable protected override Expression VisitMember(MemberExpression node) { IQueryable subQuery; if (EntityQueryUtil.CheckSubQueryInLocalVariable(node, out subQuery)) { var newExpr = Visit(subQuery.Expression); return(newExpr); } return(base.VisitMember(node)); }
private ValueKind AnalyzeMember(MemberExpression node) { // check if it is subquery stored in local variable; if yes, retrieve the value and convert to constant IQueryable subQuery; if (EntityQueryUtil.CheckSubQueryInLocalVariable(node, out subQuery)) { AnalyzeNode(subQuery.Expression); // we need to visit it as well, to process sub-query nodes return(ValueKind.Db); } //regular member access node var exprValueKind = this.AnalyzeNode(node.Expression); AddCacheKey(node.Member.Name); if (node.Member.IsStaticMember()) { return(ValueKind.Local); } else { return(exprValueKind); //same as mexp.Expression's valueKind } }