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); }
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); }
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); }
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); }