SqlSugar.ResolveExpress.Contains C# (CSharp) Method

Contains() private method

拉姆达Contains函数处理
private Contains ( string methodName, MethodCallExpression mce, bool isTure ) : string
methodName string
mce System.Linq.Expressions.MethodCallExpression
isTure bool
return string
        private string Contains(string methodName, MethodCallExpression mce, bool isTure)
        {
            MemberType leftType = MemberType.None;
            MemberType rightType = MemberType.None;
            var left = CreateSqlElements(mce.Object, ref leftType,true);
            var right = mce.Arguments[0].NodeType.IsIn(ExpressionType.Constant, ExpressionType.MemberAccess) ? CreateSqlElements(mce.Arguments[0], ref rightType, true) : Expression.Lambda(mce.Arguments[0]).Compile().DynamicInvoke().ObjToString();
            if (left.IsCollectionsList() || right.IsStringArray() || right.IsEnumerable())
            {
                object containsValue = null;
                string fieldName = "";
                if (left.IsCollectionsList())
                {
                    fieldName = right;
                    MemberExpression mbx = ((MemberExpression)mce.Object);
                    Expression exp = mce.Object;
                    SetMemberValueToDynInv(ref exp, mbx, ref containsValue);

                }
                else
                {
                    MemberExpression mbx = ((MemberExpression)mce.Arguments[0]);
                    Expression exp = mce.Arguments[0];
                    SetMemberValueToDynInv(ref exp, mbx, ref containsValue);
                    fieldName = CreateSqlElements(mce.Arguments[1], ref rightType,true);
                }
                List<string> inArray = new List<string>();
                foreach (var item in (IEnumerable)containsValue)
                {
                    inArray.Add(item.ObjToString());
                }
                if (inArray.Count == 0)
                {
                    return (" (1=2) ");
                }
                var inValue = inArray.ToArray().ToJoinSqlInVal();
                return string.Format("({0} IN ({1}))", fieldName.GetTranslationSqlName(), inValue);
            }
            else if (mce.Arguments.Count == 2) { //两个值
                //object containsValue = null;
                //MemberExpression mbx = ((MemberExpression)mce.Arguments[0]);
                //Expression exp = mce.Arguments[0];
                //SetMemberValueToDynInv(ref exp, mbx, ref containsValue);
                //var fieldName = CreateSqlElements(mce.Arguments[1], ref rightType);
                //return null;
                throw new SqlSugarException("请将数组提取成变量,不能直接写在表达式中。");
            }
            else
            {
                Check.Exception(leftType == MemberType.Value, string.Format(ExpMethodError, methodName));
                var oldLeft = AddParas(ref left, '%' + right + '%');
                return string.Format("({0} {1} LIKE " + SqlSugarTool.ParSymbol + "{2})", oldLeft.GetTranslationSqlName(), null, left);
            }
        }