SqlSugar.ResolveExpress.MemberExpression C# (CSharp) Method

MemberExpression() private method

private MemberExpression ( Expression &exp, MemberType &type, bool isComparisonOperator ) : string
exp System.Linq.Expressions.Expression
type MemberType
isComparisonOperator bool
return string
        private string MemberExpression(ref Expression exp, ref MemberType type, bool? isComparisonOperator)
        {
            MemberExpression me = ((MemberExpression)exp);
            var isPro = (me.Member.Name == "Length") && me.Member.DeclaringType == SqlSugarTool.StringType;
            var proIsField = false;
            if (isPro) proIsField = me.Expression != null && !UnderNodeTypeIsConstantExpression(me);
            if (proIsField==false&&(me.Expression == null || me.Expression.NodeType != ExpressionType.Parameter))
            {
                type = MemberType.Value;
                object dynInv = null;

                if (isPro)
                {
                    exp = me.Expression;
                    dynInv = CreateSqlElements(exp, ref type, true);
                }
                else {
                    GetMemberValue(ref exp, me, ref dynInv);
                }
                if (isPro)return GetProMethod(me.Member.Name,dynInv.ObjToString(),false);
                if (dynInv!=null&&dynInv.GetType() == SqlSugarTool.BoolType)
                {
                    dynInv = ConstantBoolDictionary.Where(it => it.Type == SqlSugarTool.BoolType).Single(it => it.OldValue.ToLower() == dynInv.ObjToString().ToLower()).NewValue;
                }
                if (dynInv == null) return null;
                else
                    return dynInv.ToString();
            }
            else if (isComparisonOperator == false)
            {
                return "(" + me.Member.Name + "=1)";
            }
            else
            {
                if (Type == ResolveExpressType.NT)
                {
                    type = MemberType.Key;
                    var dbName = exp.ToString();
                    if (DB != null && DB.IsEnableAttributeMapping && DB._mappingColumns.IsValuable())
                    {
                        var preName = dbName.Split('.').First();
                        if (DB._mappingColumns.Any(it => it.Key == dbName.Split('.').Last()))
                        {
                            dbName = preName + "." + DB._mappingColumns.Single(it => dbName.EndsWith("." + it.Key)).Value;
                        }

                    }
                    if (isPro) return GetProMethod(me.Member.Name, dbName, true);
                    return dbName;
                }
                //single T
                string name = me.Member.Name;
                if (isPro)
                {
                    name = ((me.Expression) as MemberExpression).Member.Name;
                }
                type = MemberType.Key;
                if (DB != null && DB.IsEnableAttributeMapping && DB._mappingColumns.IsValuable())
                {
                    if (DB._mappingColumns.Any(it => it.Key == name))
                    {
                        var dbName = DB._mappingColumns.Single(it => it.Key == name).Value;
                        name= dbName;
                    }

                }
                if (isPro) return GetProMethod(me.Member.Name, name, true);
                return name;
            }
        }