SchemaModel.Table GetTable() { while (true) { var memExp = (MemberExpression)_memberInfos.Peek(); _tableMember = memExp.Member; Type type = null; if (_tableMember.MemberType == MemberTypes.Field) { type = ((FieldInfo)_tableMember).FieldType; } else { type = ((PropertyInfo)_tableMember).PropertyType; } if (TypeHelper.IsCompilerGenerated(type)) { _memberInfos.Pop(); continue; } if (TableInfoManager.IsEntity(type)) { _memberInfos.Pop(); return(GetTable(type)); } return(null); } _tableMember = ((MemberExpression)_memberInfos.Pop()).Member; var tableType = ((PropertyInfo)_tableMember).PropertyType; return(GetTable(tableType)); }
protected override Expression VisitParameter(ParameterExpression node) { var type = node.Type; while (!TableInfoManager.IsEntity(type)) { var exp = _memberExpressions.Pop(); type = exp.Type; } ParseEntityType(type); return(node); }
protected override Expression VisitParameter(ParameterExpression node) { var column = new Column(); if (TableInfoManager.IsEntity(node.Type)) { //弹出第一个参数,一般是列 var table = GetTable(node.Type); var _memberInfo = ((MemberExpression)_memberInfos.Pop()).Member; column.DataType = ((PropertyInfo)_memberInfo).PropertyType; column.Name = table.Columns.Get(_memberInfo.Name).Name; column.MemberInfo = _memberInfo; var tableAlias = node.Name; if (_joins != null) { if (_joins.ContainsKey(tableAlias)) { tableAlias = _joins[tableAlias].Right.Table.Alias; } } else { tableAlias = table.Name; } column.Table = CreateTable(tableAlias, table.DataBase, table.Name, table.Type); while (_memberInfos.Count > 0) { var exp = _memberInfos.Pop(); switch (exp.NodeType) { case ExpressionType.MemberAccess: var memberInfo = ((MemberExpression)exp).Member; column.Converters.Push(new ColumnConverter(memberInfo, new List <object>())); break; default: throw new Exception(); } } //column.Converter = GetConverter(null); } else { SchemaModel.Table tableInfo = GetTable(); MemberInfo columnMember = null; var tableAlias = string.Empty; Table table = null; if (tableInfo != null) { tableAlias = _tableMember.Name; columnMember = ((MemberExpression)_memberInfos.Pop()).Member; if (_joins != null) { if (_joins.ContainsKey(tableAlias)) { tableAlias = _joins[tableAlias].Right.Table.Alias; } } else { tableAlias = tableInfo.Name; } table = CreateTable(tableAlias, tableInfo.DataBase, tableInfo.Name, tableInfo.Type); } else { columnMember = ((MemberExpression)_memberInfos.Pop()).Member; table = _columns.Get(columnMember.Name).Table; tableAlias = table.Alias; tableInfo = GetTable(table.Type); } //if (_memberInfos.Count > 1) //{ // tableInfo = GetTable(); //} //else //{ //} var columnType = ((PropertyInfo)columnMember).PropertyType; var columnName = string.Empty; var columnSechma = tableInfo.Columns.Get(columnMember.Name); if (columnSechma != null) { columnName = columnSechma.Name; } else { columnName = Context.Columns.Get(columnMember.Name).Name; } column = new Column() { DataType = columnType, Name = columnName, Table = table, MemberInfo = columnMember }; while (_memberInfos.Count > 0) { var exp = _memberInfos.Pop(); switch (exp.NodeType) { case ExpressionType.MemberAccess: var memberInfo = ((MemberExpression)exp).Member; column.Converters.Push(new ColumnConverter(memberInfo, new List <object>())); break; default: throw new Exception(); } } //column.Converter = GetConverter(null); } Token = Token.Create(column); return(node); }
protected override Expression VisitParameter(ParameterExpression node) { //MemberExpressionType = MemberExpressionType.Column; if (TableInfoManager.IsEntity(node.Type)) { //弹出第一个参数,一般是列 var table = GetTable(node.Type); var _memberInfo = _memberInfoStack.Pop(); SelectedColumn.DataType = ((PropertyInfo)_memberInfo).PropertyType; SelectedColumn.Name = table.Columns.Get(_memberInfo.Name).Name; SelectedColumn.MemberInfo = _memberInfo; var tableAlias = node.Name; if (_Joins != null) { if (_Joins.ContainsKey(tableAlias)) { tableAlias = _Joins[tableAlias].Right.Table.Alias; } } else { tableAlias = table.Name; } SelectedColumn.Table = CreateTable(tableAlias, table.DataBase, table.Name, table.Type); while (_memberInfoStack.Count > 0) { var propertyInfo = (MemberInfo)_memberInfoStack.Pop(); SelectedColumn.Converters.Push(new ColumnConverter(propertyInfo, new List <object>())); } //SelectedColumn.Converter = GetConverter(); } else { var tableInfo = GetTable(); var columnMember = _memberInfoStack.Pop(); var columnType = ((PropertyInfo)columnMember).PropertyType; var tableAlias = _tableMember.Name; if (_Joins != null) { if (_Joins.ContainsKey(tableAlias)) { tableAlias = _Joins[tableAlias].Right.Table.Alias; } } else { tableAlias = tableInfo.Name; } var table = CreateTable(tableAlias, tableInfo.DataBase, tableInfo.Name, tableInfo.Type); SelectedColumn = new Column() { DataType = columnType, Name = tableInfo.Columns.Get(columnMember.Name).Name, Table = table, MemberInfo = columnMember }; while (_memberInfoStack.Count > 0) { var exp = _memberInfoStack.Pop(); SelectedColumn.Converters.Push(new ColumnConverter(exp, new List <object>())); } //SelectedColumn.Converter = GetConverter(); } return(node); }