public object Execute(Expression expression, bool isEnumerable) { var visitor = new Visitor.RequestExpressionVisitor(expression); visitor.Visit(); Operations = visitor.Operations; var rt = visitor.GetReturnType(); var type = typeof(List <>).MakeGenericType(rt); var instance = CreateInstance(type); return(instance); }
public void Visitor_MultipleOrderingDifferentDirection() { // Arrange var context = new FakeQueryContext(() => new List <Customer>()); // Act var customers = context.GetTable <Customer>(); var query = customers.AsQueryable().OrderBy(x => x.Id).ThenByDescending(x => x.Lastname); var queryExp = query.Expression; var visitor = new Visitor.RequestExpressionVisitor(queryExp); visitor.Visit(); // Assert var actualOperations = visitor.Operations; Assert.AreEqual(2, actualOperations.Count()); AssertOrderOperation(actualOperations[0] as Visitor.Operation.Order, "Id"); AssertOrderOperation(actualOperations[1] as Visitor.Operation.Order, "Lastname", Visitor.OrderDirection.Descending); }
public void Visitor_OrderingDescending() { // Arrange var context = new FakeQueryContext(() => new List <Customer>()); // Act var customers = context.GetTable <Customer>(); var query = customers.AsQueryable().OrderByDescending(x => x.Id); var queryExp = query.Expression; var visitor = new Visitor.RequestExpressionVisitor(queryExp); visitor.Visit(); // Assert var actualOperations = visitor.Operations; Assert.AreEqual(1, actualOperations.Count()); var operation = actualOperations.First() as Visitor.Operation.Order; AssertOrderOperation(operation, "Id", Visitor.OrderDirection.Descending); }
public void Visitor_OData_SkipSimple() { // Arrange var context = new FakeQueryContext(() => new List <Customer>()); var limit = (int)10; // Act var customers = context.GetTable <Customer>(); var queryExp = ODataHelpers.Skip(customers.AsQueryable().Expression, limit, typeof(Customer), true); var visitor = new Visitor.RequestExpressionVisitor(queryExp); visitor.Visit(); // Assert var actualOperations = visitor.Operations; Assert.AreEqual(1, actualOperations.Count()); var takeOperation = actualOperations.First(); Assert.IsTrue(takeOperation.IsSkip); Assert.AreEqual(limit, ((Visitor.Operation.Skip)takeOperation).Item); }
public void Visitor_AndExpression() { // Arrange var context = new FakeQueryContext(() => new List <Customer>()); // Act var customers = context.GetTable <Customer>(); var query = customers.AsQueryable().Where(x => x.Firstname == "popo" && x.Lastname == "papa"); var queryExp = query.Expression; var visitor = new Visitor.RequestExpressionVisitor(queryExp); visitor.Visit(); // Assert var actualOperations = visitor.Operations; Assert.AreEqual(1, actualOperations.Count()); var operation = actualOperations.First() as Visitor.Operation.Where; var compareOperation = operation.Item as Visitor.WhereArgs.BinaryComparison; AssertUnaryComparison(compareOperation.Item1, "Firstname", "popo", Visitor.ComparisonKind.Equal); Assert.AreEqual(Visitor.BinaryComparisonKind.And, compareOperation.Item2); AssertUnaryComparison(compareOperation.Item3, "Lastname", "papa", Visitor.ComparisonKind.Equal); }