public override VfpExpression Visit(VfpInExpression expression)
        {
            const int convertToXmltocursorMintextLength = 200;

            if (expression.List.Any(x => x.ExpressionKind != VfpExpressionKind.Constant))
            {
                return(base.Visit(expression));
            }

            var values = new StringBuilder(convertToXmltocursorMintextLength);
            var array  = expression.List.Cast <VfpConstantExpression>().Select(x => x.Value).Distinct().ToArray();

            foreach (var item in array)
            {
                values.Append(item);

                if (values.Length > convertToXmltocursorMintextLength)
                {
                    break;
                }
            }

            if (values.Length > convertToXmltocursorMintextLength)
            {
                _count++;

                var arrayXmlToCursor = new ArrayXmlToCursor(array);
                var xml         = VfpExpressionBuilder.Constant(arrayXmlToCursor.Xml);
                var parameter   = VfpExpressionBuilder.Parameter(PrimitiveTypeKind.String.ToTypeUsage(), "@__XmlToCursor" + _count, xml);
                var cursorName  = "curXml" + _count;
                var xmlToCursor = VfpExpressionBuilder.XmlToCursor(expression.Item, parameter, cursorName, arrayXmlToCursor.ItemType);

                return(base.Visit(xmlToCursor));
            }

            return(base.Visit(expression));
        }
 public virtual VfpExpression Visit(VfpInExpression expression)
 {
     return(new VfpInExpression(expression.ResultType,
                                expression.Item.Accept(this),
                                VisitVfpExpressionList(expression.List)));
 }