private DicModel CollectionIn(Expression expr, MemberExpression memExpr) { var keyTuple = GetKey(expr, OptionEnum.In); var val = HandMember(memExpr); return(DicHandle.CallInHandle(keyTuple.key, keyTuple.alias, val, keyTuple.valType)); }
private DicModel NewCollectionIn(ExpressionType nodeType, Expression keyExpr, Expression valExpr) { if (nodeType == ExpressionType.NewArrayInit) { var naExpr = valExpr as NewArrayExpression; var keyTuple = GetKey(keyExpr, OptionEnum.In); var vals = new List <string>(); foreach (var exp in naExpr.Expressions) { vals.Add(DC.VH.GetConstantVal(exp as ConstantExpression, keyTuple.valType)); } var val = string.Join(",", vals); return(DicHandle.CallInHandle(keyTuple.key, keyTuple.alias, val, keyTuple.valType)); } else if (nodeType == ExpressionType.ListInit) { var liExpr = valExpr as ListInitExpression; var keyTuple = GetKey(keyExpr, OptionEnum.In); var vals = new List <string>(); foreach (var ini in liExpr.Initializers) { var arg = ini.Arguments[0]; vals.Add(DC.VH.GetConstantVal(ini.Arguments[0] as ConstantExpression, keyTuple.valType)); } var val = string.Join(",", vals); return(DicHandle.CallInHandle(keyTuple.key, keyTuple.alias, val, keyTuple.valType)); } return(null); }
private DicModel HandConditionCall(MethodCallExpression mcExpr) { var exprStr = mcExpr.ToString(); if (exprStr.Contains(".Contains(")) { if (mcExpr.Object == null) { var memKey = mcExpr.Arguments[1]; var memVal = mcExpr.Arguments[0]; if (memVal.NodeType == ExpressionType.MemberAccess) { var keyTuple = GetKey(memKey, OptionEnum.In); var val = HandMember(memVal as MemberExpression); return(DicHandle.CallInHandle(keyTuple.key, keyTuple.alias, val, keyTuple.valType)); } else if (memVal.NodeType == ExpressionType.NewArrayInit) { var naExpr = memVal as NewArrayExpression; var keyTuple = GetKey(memKey, OptionEnum.In); var vals = new List <string>(); foreach (var exp in naExpr.Expressions) { vals.Add(DC.VH.GetConstantVal(exp as ConstantExpression, keyTuple.valType)); } var val = string.Join(",", vals); return(DicHandle.CallInHandle(keyTuple.key, keyTuple.alias, val, keyTuple.valType)); } } else { var objExpr = mcExpr.Object; var objNodeType = mcExpr.Object.NodeType; if (objNodeType == ExpressionType.MemberAccess) { var memO = objExpr as MemberExpression; var memType = objExpr.Type; if (memType.GetInterfaces() != null && memType.GetInterfaces().Contains(typeof(IList)) && !memType.IsArray) { var val = HandMember(memO); var keyTuple = GetKey(mcExpr, OptionEnum.In); return(DicHandle.CallInHandle(keyTuple.key, keyTuple.alias, val, keyTuple.valType)); } else if (memType == typeof(string)) { var keyTuple = GetKey(memO, OptionEnum.Like); var val = DC.VH.GetCallVal(mcExpr); return(DicHandle.CallLikeHandle(keyTuple.key, keyTuple.alias, val, keyTuple.valType)); } } else if (objNodeType == ExpressionType.ListInit) { var liExpr = objExpr as ListInitExpression; var keyTuple = GetKey(mcExpr, OptionEnum.In); var vals = new List <string>(); foreach (var ini in liExpr.Initializers) { var arg = ini.Arguments[0]; vals.Add(DC.VH.GetConstantVal(ini.Arguments[0] as ConstantExpression, keyTuple.valType)); } var val = string.Join(",", vals); return(DicHandle.CallInHandle(keyTuple.key, keyTuple.alias, val, keyTuple.valType)); } } } return(null); }