Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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());
        }
Example #4
0
        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);
        }