Exemple #1
0
        protected override Expression VisitIn(InExpression expression)
        {
            if (!ShouldRewrite(expression)) {
                return base.VisitIn(expression);
            }

            Array array = expression.Values.OfType<ConstantExpression>().Select(item => item.Value).Distinct().ToArray();

            var vfpDataXml = new ArrayXmlToCursor(array);
            var tableAlias = new TableAlias();
            var columnType = _language.TypeSystem.GetColumnType(vfpDataXml.ItemType);
            var columnExpression = new ColumnExpression(vfpDataXml.ItemType, columnType, tableAlias, ArrayXmlToCursor.ColumnName);

            var columns = new List<ColumnDeclaration> {
                new ColumnDeclaration(string.Empty, columnExpression, columnType)
            };

            var xml = Expression.Constant(vfpDataXml.Xml);
            var cursorName = Expression.Constant("curTemp_" + DateTime.Now.ToString("ddHHssmm"));
            var check = Expression.GreaterThan(new XmlToCursorExpression(xml, cursorName), Expression.Constant(0));
            var from = Expression.Condition(check, cursorName, Expression.Constant(string.Empty));
            var select = new SelectExpression(tableAlias, columns, from, null);

            return new InExpression(expression.Expression, select);
        }
Exemple #2
0
        public void XmlToCursorTests_DoubleArray_Test()
        {
            double[] orderIds = { 10248, 1, 10249 };
            var xmlToCursor = new ArrayXmlToCursor(orderIds);
            var list = northwind.List<Order>().Where(order => orderIds.Contains(order.OrderID)).ToList();

            Assert.AreEqual(typeof(double[]), xmlToCursor.ArrayType);
            Assert.AreEqual(typeof(double), xmlToCursor.ItemType);
            Assert.AreEqual(2, list.Count);
        }
Exemple #3
0
        public void XmlToCursorTests_BooleanIntArray_Test()
        {
            int[] orderIds = { 0, 1 };
            var xmlToCursor = new ArrayXmlToCursor(orderIds);
            var list = northwind.List<Order>().Where(order => orderIds.Contains(order.OrderID)).ToList();

            Assert.AreEqual(typeof(int[]), xmlToCursor.ArrayType);
            Assert.AreEqual(typeof(int), xmlToCursor.ItemType);
            Assert.AreEqual(0, list.Count);
        }
Exemple #4
0
        public void XmlToCursorTests_StringArray_Test()
        {
            string[] customerIds = { "VINET", "WARTH", null };
            var xmlToCursor = new ArrayXmlToCursor(customerIds);
            var list = northwind.List<Customer>().Where(customer => customerIds.Contains(customer.CustomerID)).ToList();

            Assert.AreEqual(typeof(string[]), xmlToCursor.ArrayType);
            Assert.AreEqual(typeof(string), xmlToCursor.ItemType);
            Assert.AreEqual(2, list.Count);
        }