public string GetAliasFor(Expression <Func <T, object> > propertyExpression) { MemberInfo member = MemberChainHelper.GetMembers(propertyExpression).LastOrDefault(); if (member == null) { return(this._pocoData.TableInfo.AutoAlias); } JoinData pocoMember = this._joinExpressions.Values.SingleOrDefault(x => x.PocoMember.MemberInfoData.MemberInfo == member); if (pocoMember == null) { throw new Exception("Tried to get alias for table that has not been included"); } return(pocoMember.PocoMemberJoin.PocoColumn.TableInfo.AutoAlias); }
public Dictionary <string, JoinData> GetJoinExpressions(Expression expression, string tableAlias, JoinType joinType, string hint) { var memberInfos = MemberChainHelper.GetMembers(expression); var members = _pocoData.Members; var joinExpressions = new Dictionary <string, JoinData>(); foreach (var memberInfo in memberInfos) { var pocoMember = members .Where(x => x.ReferenceType != ReferenceType.None) .Single(x => x.MemberInfoData.MemberInfo.Name == memberInfo.Name); var pocoColumn1 = pocoMember.PocoColumn; var pocoMember2 = pocoMember.PocoMemberChildren.Single(x => x.Name == pocoMember.ReferenceMemberName); var pocoColumn2 = pocoMember2.PocoColumn; pocoColumn2.TableInfo.AutoAlias = tableAlias ?? pocoColumn2.TableInfo.AutoAlias; var onSql = _database.DatabaseType.EscapeTableName(pocoColumn1.TableInfo.AutoAlias) + "." + _database.DatabaseType.EscapeSqlIdentifier(pocoColumn1.ColumnName) + " = " + _database.DatabaseType.EscapeTableName(pocoColumn2.TableInfo.AutoAlias) + "." + _database.DatabaseType.EscapeSqlIdentifier(pocoColumn2.ColumnName); if (!joinExpressions.ContainsKey(onSql)) { joinExpressions.Add(onSql, new JoinData() { OnSql = onSql, PocoMember = pocoMember, PocoMemberJoin = pocoMember2, PocoMembers = pocoMember.PocoMemberChildren, JoinType = joinType, Hint = hint == string.Empty ? hint : " " + hint }); } members = pocoMember.PocoMemberChildren; } return(joinExpressions); }
public static MemberInfo[] GetMembers <TValue>(Expression <Func <T, TValue> > selector) { //Expression body = selector; //if (body is LambdaExpression) //{ // body = ((LambdaExpression)body).Body; //} //if (body is UnaryExpression) //{ // body = ((UnaryExpression)body).Operand; //} //switch (body.NodeType) //{ // case ExpressionType.MemberAccess: // return ((MemberExpression)body).Member; // default: // throw new InvalidOperationException(); //} return(MemberChainHelper.GetMembers(selector).ToArray()); }
public Dictionary <string, JoinData> GetJoinExpressions(Expression expression, string tableAlias, JoinType joinType) { IEnumerable <MemberInfo> memberInfos = MemberChainHelper.GetMembers(expression); List <PocoMember> members = this._pocoData.Members; Dictionary <string, JoinData> joinExpressions = new Dictionary <string, JoinData>(); foreach (MemberInfo memberInfo in memberInfos) { PocoMember pocoMember = members .Where(x => x.ReferenceType != ReferenceType.None) .Single(x => x.MemberInfoData.MemberInfo == memberInfo); PocoColumn pocoColumn1 = pocoMember.PocoColumn; PocoMember pocoMember2 = pocoMember.PocoMemberChildren.Single(x => x.Name == pocoMember.ReferenceMemberName); PocoColumn pocoColumn2 = pocoMember2.PocoColumn; pocoColumn2.TableInfo.AutoAlias = tableAlias ?? pocoColumn2.TableInfo.AutoAlias; string onSql = this._database.DatabaseType.EscapeTableName(pocoColumn1.TableInfo.AutoAlias) + "." + this._database.DatabaseType.EscapeSqlIdentifier(pocoColumn1.ColumnName) + " = " + this._database.DatabaseType.EscapeTableName(pocoColumn2.TableInfo.AutoAlias) + "." + this._database.DatabaseType.EscapeSqlIdentifier(pocoColumn2.ColumnName); if (!joinExpressions.ContainsKey(onSql)) { joinExpressions.Add(onSql, new JoinData() { OnSql = onSql, PocoMember = pocoMember, PocoMemberJoin = pocoMember2, PocoMembers = pocoMember.PocoMemberChildren, JoinType = joinType }); } members = pocoMember.PocoMemberChildren; } return(joinExpressions); }