/// <summary>
        /// Create a new DetachedCriteria, "rooted" at the associated entity
        /// </summary>
        /// <typeparam name="T">Type (same as criteria type)</typeparam>
        /// <param name="criteria">criteria instance</param>
        /// <param name="expression">Lambda expression returning association path</param>
        /// <returns>The created "sub criteria"</returns>
        public static DetachedCriteria CreateCriteria <T>(this DetachedCriteria criteria,
                                                          Expression <Func <T, object> > expression)
        {
            string path = ExpressionProcessor.FindMemberExpression(expression.Body);

            return(criteria.CreateCriteria(path));
        }
        /// <summary>
        /// Create a new DetachedCriteria, "rooted" at the associated entity
        /// </summary>
        /// <param name="criteria">criteria instance</param>
        /// <param name="expression">Lambda expression returning association path</param>
        /// <param name="joinType">The type of join to use</param>
        /// <returns>The created "sub criteria"</returns>
        public static DetachedCriteria CreateCriteria(this DetachedCriteria criteria,
                                                      Expression <Func <object> > expression,
                                                      JoinType joinType)
        {
            string path = ExpressionProcessor.FindMemberExpression(expression.Body);

            return(criteria.CreateCriteria(path, joinType));
        }
        /// <summary>
        /// Create a new DetachedCriteria, "rooted" at the associated entity
        /// </summary>
        /// <param name="criteria">criteria instance</param>
        /// <param name="expression">Lambda expression returning association path</param>
        /// <param name="alias">Lambda expression returning alias reference</param>
        /// <returns>The created "sub criteria"</returns>
        public static DetachedCriteria CreateCriteria(this DetachedCriteria criteria,
                                                      Expression <Func <object> > expression,
                                                      Expression <Func <object> > alias)
        {
            string path           = ExpressionProcessor.FindMemberExpression(expression.Body);
            string aliasContainer = ExpressionProcessor.FindMemberExpression(alias.Body);

            return(criteria.CreateCriteria(path, aliasContainer));
        }