/// <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 }); }
public object FormatSelectAlias(SelectAlias alias) { return(alias.ToSqlString()); }
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 }); }