Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="exp"></param>
        /// <returns></returns>
        private List <SelectAlias> VisitBinaryExpression(BinaryExpression exp)
        {
            var sa = new SelectAlias();

            var left  = Visit(exp.Left);
            var right = Visit(exp.Right);

            sa.Children.AddRange(left);
            sa.Children.AddRange(right);

            sa.Alias = "C0";

            selectList.Add(sa);
            return(new List <SelectAlias>()
            {
                sa
            });
        }
Exemplo n.º 2
0
 public object FormatSelectAlias(SelectAlias alias)
 {
     return(alias.ToSqlString());
 }
Exemplo n.º 3
0
        public SelectAlias Decode(MemberExpression exp)
        {
            var p = exp.Expression as ParameterExpression;

            if (p == null)
            {
                return(null);
            }

            var pIdx  = _parameters.IndexOf(p);
            var alias = _aliasList[pIdx];

            string      fieldName = null;
            SelectAlias parent    = null;

            //start checking if alias from clause is a sub select
            if (alias.SubGeneratedSelect != null)
            {
                parent = alias.SubGeneratedSelect.SelectList.FirstOrDefault(s => s.TargetMember == exp.Member);

                if (alias.SubGeneratedSelect.IsAllSelect)
                {
                    parent = alias.SubGeneratedSelect.SelectList[0];
                }

                if (parent == null)
                {
                    return(null);
                }

                if (parent is SelectAllAlias)
                {
                    fieldName = (parent as SelectAllAlias).GetFieldName(exp.Member.Name);
                }
                else
                {
                    fieldName = parent.Alias;
                }
            }
            else
            {
                var property = alias.TableType.GetProperties().FirstOrDefault(prop => prop.Name == exp.Member.Name);
                if (property == null)
                {
                    throw new Exception("Unable to find member " + exp.Member.Name + "in type " + alias.TableType);
                }

                var fieldAttr = property.CustomAttributes.FirstOrDefault(a => a.AttributeType == typeof(Field));
                if (fieldAttr == null)
                {
                    throw new Exception("Unable to find field attribute " + exp.Member.Name + "in type " + alias.TableType);
                }
                ;

                if (fieldAttr.ConstructorArguments.Count > 0)
                {
                    fieldName = fieldAttr.ConstructorArguments[0].Value.ToString();
                }
                else
                {
                    fieldName = exp.Member.Name;
                }
            }

            return(new SelectAlias()
            {
                Name = fieldName,
                Source = alias.Name,
                Alias = alias.Name + "_" + fieldName,
                Parent = parent,
                SourceType = alias.TableType,
                SourceMember = exp.Member
            });
        }