コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }