protected Expression CreateChildExpression(ParameterExpression param, int index) { LiteralNode constant = FindChild <LiteralNode>(index); if (constant != null) { return(constant.CreateExpression()); } Expression expression = CreateDereferenceExpression(param, index); if (expression != null) { return(expression); } PredicateNode predicate = FindChild <PredicateNode>(index); if (predicate != null) { return(predicate.CreateExpression(param)); } FunctionNode function = FindChild <FunctionNode>(index); if (function != null) { return(function.CreateExpression(param)); } // by not passing an index we pick up 'WHERE TRUE' etc LiteralNode literal = FindChild <LiteralNode>(); if (literal != null) { return(literal.CreateExpression()); } return(null); }