/// <summary> /// Convert a lambda expression to NHibernate subquery AbstractCriterion /// </summary> /// <param name="subqueryType">type of subquery</param> /// <param name="expression">lambda expression to convert</param> /// <returns>NHibernate.ICriterion.AbstractCriterion</returns> public static AbstractCriterion ProcessSubquery(LambdaSubqueryType subqueryType, Expression <Func <bool> > expression) { BinaryExpression be = (BinaryExpression)expression.Body; AbstractCriterion criterion = ProcessSubqueryExpression(subqueryType, be); return(criterion); }
private static AbstractCriterion ProcessSubqueryExpression(LambdaSubqueryType subqueryType, BinaryExpression be) { string property = FindMemberExpression(be.Left); DetachedCriteria detachedCriteria = FindDetachedCriteria(be.Right); var subqueryExpressionCreators = _subqueryExpressionCreatorTypes[subqueryType]; Func <string, DetachedCriteria, AbstractCriterion> subqueryExpressionCreator; if (!subqueryExpressionCreators.TryGetValue(be.NodeType, out subqueryExpressionCreator)) { throw new InvalidOperationException("Unhandled subquery expression type: " + subqueryType + "," + be.NodeType); } return(subqueryExpressionCreator(property, detachedCriteria)); }
private static AbstractCriterion ProcessSubqueryExpression(LambdaSubqueryType subqueryType, BinaryExpression be) { string property = FindMemberExpression(be.Left); DetachedCriteria detachedCriteria = FindDetachedCriteria(be.Right); var subqueryExpressionCreators = _subqueryExpressionCreatorTypes[subqueryType]; if (!subqueryExpressionCreators.ContainsKey(be.NodeType)) { throw new Exception("Unhandled subquery expression type: " + subqueryType + "," + be.NodeType); } Func <string, DetachedCriteria, AbstractCriterion> subqueryExpressionCreator = subqueryExpressionCreators[be.NodeType]; return(subqueryExpressionCreator(property, detachedCriteria)); }