/// <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)); }
/// <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)); }
/// <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)); }