Exemple #1
0
        /// <summary>
        /// 扩展方法: 获取Column元数据解析器
        /// </summary>
        /// <param name="mapperContainer">Mapper容器</param>
        /// <param name="memberExpression">指定对象成员的表达式</param>
        /// <returns>Column元数据解析器</returns>
        public static IColumnMapper GetColumnMapper(this IMapperContainer mapperContainer, MemberExpression memberExpression)
        {
            //获取当前实体类型的Table元数据解析器
            ITableMapper tableMapper = mapperContainer.GetTableMapper(memberExpression.Expression.Type);

            //获取Column元数据解析器
            return(tableMapper.GetColumnMapper(memberExpression.Member.Name));
        }
Exemple #2
0
        /// <summary>
        /// 获取基本类型的sql表达式节点
        /// </summary>
        /// <param name="memberExpression">成员表达式</param>
        /// <returns>基本类型的sql表达式节点</returns>
        protected ISqlBuilder GetColumnBuilder(MemberExpression memberExpression)
        {
            //若Mapper容器为空
            if (_mapperContainer == null)
            {
                //则直接获取针对 WITH AS 临时表的sql表达式
                return(new SqlBuilder("t.{0}", memberExpression.Member.Name));
            }
            //若不为空,则获取针对表的sql表达式
            // 获取当前实体类型的Table元数据解析器
            ITableMapper tableMapper = _mapperContainer.GetTableMapper(memberExpression.Expression.Type);
            // 获取columnMapper
            IColumnMapper columnMapper = tableMapper.GetColumnMapper(memberExpression.Member.Name);

            // 获取sql列节点生成器
            return(_commandTreeFactory.GetColumnBuilder(tableMapper.Header.TableAlias, columnMapper.ColumnName));
        }
Exemple #3
0
        /// <summary>
        /// 获取Where节点的子sql表达式节点
        /// </summary>
        /// <param name="memberExpression">成员表达式</param>
        /// <param name="rightSqlExpression">右边的sql条件表达式</param>
        /// <returns>Where节点的子sql表达式节点</returns>
        protected INodeBuilder GetWhereChildBuilder(MemberExpression memberExpression, string rightSqlExpression)
        {
            //若Mapper容器为空
            if (_mapperContainer == null)
            {
                //则直接获取针对 WITH AS 临时表的sql表达式
                return(new NodeBuilder(SqlType.Where, "t.{0} {1}", memberExpression.Member.Name, rightSqlExpression));
            }
            //若不为空,则获取针对实体类对应的表的sql表达式
            // 获取当前实体类型的Table元数据解析器
            ITableMapper tableMapper = _mapperContainer.GetTableMapper(memberExpression.Expression.Type);
            // 获取columnMapper
            IColumnMapper columnMapper = tableMapper.GetColumnMapper(memberExpression.Member.Name);

            // 获取Where节点的子sql表达式节点
            return(_commandTreeFactory.GetWhereChildBuilder(tableMapper.Header.TableAlias, columnMapper.ColumnName, rightSqlExpression));
        }