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;
}
}