private Expression <Func <string, bool> > ResolveInFunc(MethodCallExpression methodCallExpression, bool @in)
        {
            if (methodCallExpression.IsEnumerableContains(methodCallExpression.Method.Name) && IsMethodWrapShardingKey(methodCallExpression))
            {
                object arrayObject = null;
                if (methodCallExpression.Object != null)
                {
                    if (methodCallExpression.Object is MemberExpression member1Expression)
                    {
                        arrayObject = Expression.Lambda(member1Expression).Compile().DynamicInvoke();
                    }
                    else if (methodCallExpression.Object is ListInitExpression member2Expression)
                    {
                        arrayObject = Expression.Lambda(member2Expression).Compile().DynamicInvoke();
                    }
                }
                else if (methodCallExpression.Arguments[0] is MemberExpression member2Expression)
                {
                    arrayObject = Expression.Lambda(member2Expression).Compile().DynamicInvoke();
                }
                else if (methodCallExpression.Arguments[0] is NewArrayExpression member3Expression)
                {
                    arrayObject = Expression.Lambda(member3Expression).Compile().DynamicInvoke();
                }

                if (arrayObject != null)
                {
                    var enumerable = (IEnumerable)arrayObject;
                    Expression <Func <string, bool> > contains = x => false;
                    if (!@in)
                    {
                        contains = x => true;
                    }
                    foreach (var item in enumerable)
                    {
                        var keyValue = _shardingKeyConvert(item);
                        var eq       = _keyToTailWithFilter(keyValue, @in ? ShardingOperatorEnum.Equal : ShardingOperatorEnum.NotEqual);
                        if (@in)
                        {
                            contains = contains.Or(eq);
                        }
                        else
                        {
                            contains = contains.And(eq);
                        }
                    }

                    return(contains);
                }
            }

            return(x => true);
        }