public void WhenParsingInputThenCreatesExpectedExpression(string input, string expected)
        {
            var filterFactory = new FilterExpressionFactory(new MemberNameResolver(), Enumerable.Empty <IValueExpressionFactory>());

            var expression = filterFactory.Create <TypeInstanceData>(input);

            Assert.AreEqual(expected, expression.ToString());
        }
		public void WhenParsingInputThenCreatesExpectedExpression(string input, string expected)
		{
			var filterFactory = new FilterExpressionFactory(new MemberNameResolver(), Enumerable.Empty<IValueExpressionFactory>());

			var expression = filterFactory.Create<TypeInstanceData>(input);

			Assert.AreEqual(expected, expression.ToString());
		}
        /// <summary>
        /// Initializes a new instance of the <see cref="ODataExpressionConverter"/> class.
        /// </summary>
        /// <param name="valueWriters">The custom value writers to use.</param>
        /// <param name="valueExpressionFactories">The custom expression writers to use.</param>
        /// <param name="memberNameResolver">The custom <see cref="IMemberNameResolver"/> to use.</param>
        public ODataExpressionConverter(IEnumerable <IValueWriter> valueWriters, IEnumerable <IValueExpressionFactory> valueExpressionFactories, IMemberNameResolver memberNameResolver = null)
        {
            var writers             = (valueWriters ?? Enumerable.Empty <IValueWriter>()).ToArray();
            var expressionFactories = (valueExpressionFactories ?? Enumerable.Empty <IValueExpressionFactory>()).ToArray();
            var nameResolver        = memberNameResolver ?? new MemberNameResolver();

            _writer = new ExpressionWriter(nameResolver, writers);
            _parser = new FilterExpressionFactory(nameResolver, expressionFactories);
        }
Beispiel #4
0
        public void WhenApplyingSerializedExpressionThenCreatesSameResultAsOriginalExpressionWithNotFlagsEnumToNumberComparison()
        {
            Func <FakeItem, bool> original = x => x.NotFlagsValue == NotFlags.Fine && x.IntValue >= 3;
            var factory      = new FilterExpressionFactory(new MemberNameResolver(), Enumerable.Empty <IValueExpressionFactory>());
            var deserialized = factory.Create <FakeItem>("NotFlagsValue eq 3 And IntValue ge 3");

            var originalResult     = _collection.Where(original).ToArray();
            var deserializedResult = _collection.Where(deserialized.Compile()).ToArray();

            Assert.True(originalResult.SequenceEqual(deserializedResult));
        }
        public void WhenApplyingSerializedExpressionThenCreatesSameResultAsOriginalExpressionWithEnumToNumberComparison()
        {
            Func<FakeItem, bool> original = x => (x.ChoiceValue & Choice.That) == Choice.That && x.IntValue >= 3;

            var factory = new FilterExpressionFactory(new MemberNameResolver(), Enumerable.Empty<IValueExpressionFactory>());
            var deserialized = factory.Create<FakeItem>("ChoiceValue eq 2 And IntValue ge 3");

            var originalResult = _collection.Where(original).ToArray();
            var deserializedResult = _collection.Where(deserialized.Compile()).ToArray();

            Assert.True(originalResult.SequenceEqual(deserializedResult));
        }
Beispiel #6
0
        public void WhenApplyingSerializedExpressionThenCreatesSameResultAsOriginalExpression()
        {
            Func <FakeItem, bool> original = x => (x.ChoiceValue & Choice.That) == Choice.That && x.IntValue >= 3;

            var factory      = new FilterExpressionFactory(new MemberNameResolver(), Enumerable.Empty <IValueExpressionFactory>());
            var deserialized = factory.Create <FakeItem>("ChoiceValue eq Linq2Rest.Tests.Choice'That' And IntValue ge 3");

            var originalResult     = _collection.Where(original).ToArray();
            var deserializedResult = _collection.Where(deserialized.Compile()).ToArray();

            Assert.True(originalResult.SequenceEqual(deserializedResult));
        }
Beispiel #7
0
        internal static IQbservable <T> Deserialize <T>(IQbservable <T> query, IEnumerable <ServiceQueryPart> queryParts)
        {
            Contract.Requires(query != null);
            Contract.Requires(queryParts != null);
            int?skip = null;
            int?top  = null;

            foreach (ServiceQueryPart part in queryParts)
            {
                switch (part.QueryOperator)
                {
                case "filter":
                    FilterExpressionFactory      filterExpressionFactory = new FilterExpressionFactory();
                    Expression <Func <T, bool> > expression = filterExpressionFactory.Create <T>(part.Expression);
                    query = query.Where(expression);
                    break;

                case "orderby":
                    throw new NotSupportedException("The query operator 'orderby' is not supported for event streams");

                case "skip":
                    int skipValue;
                    if (int.TryParse(part.Expression, out skipValue))
                    {
                        skip = skipValue;
                    }
                    break;

                case "top":
                    int topValue;
                    if (int.TryParse(part.Expression, out topValue))
                    {
                        top = topValue;
                    }
                    break;
                }
            }

            if (skip != null)
            {
                query = query.Skip(skip.Value);
            }
            if (top != null)
            {
                query = query.Take(top.Value);
            }
            return(query);
        }
Beispiel #8
0
        /// <summary>
        /// To the query options.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="odataQueryOptions">The o data query options.</param>
        /// <returns>QueryOptions{``0}.</returns>
        public static QueryOptions <T> ToQueryOptions <T>(this ODataQueryOptions <T> odataQueryOptions)
        {
            if (odataQueryOptions == null)
            {
                return(null);
            }
            var nameResolver   = new MemberNameResolver();
            var selectFactory  = new SelectExpressionFactory <T>(nameResolver, new RuntimeTypeProvider(nameResolver));
            var filterFactiory = new FilterExpressionFactory(nameResolver, Enumerable.Empty <IValueExpressionFactory>());
            var orderFactory   = new SortExpressionFactory(nameResolver);

            return(new QueryOptions <T>
            {
                Top = odataQueryOptions.Top?.Value,
                Skip = odataQueryOptions.Skip?.Value,
                Select =
                    !string.IsNullOrEmpty(odataQueryOptions.SelectExpand?.RawSelect)
                                   ? selectFactory.Create(odataQueryOptions.SelectExpand.RawSelect)
                                   : null,
                Expand =
                    !string.IsNullOrEmpty(odataQueryOptions.SelectExpand?.RawExpand)
                                   ? odataQueryOptions.SelectExpand.RawExpand.Split(',').ToList()
                                   : null,
                OrderBy =
                    !string.IsNullOrEmpty(odataQueryOptions.OrderBy?.RawValue)
                                   ? orderFactory.Create <T>(odataQueryOptions.OrderBy.RawValue)
                    .Select(
                        description =>
                        new SortDescription(
                            description.KeySelector,
                            (SortDirection)description.Direction))
                    .ToList()
                                   : null,
                Filter =
                    !string.IsNullOrEmpty(odataQueryOptions.Filter?.RawValue)
                                   ? filterFactiory.Create <T>(odataQueryOptions.Filter.RawValue)
                                   : null
            });
        }
        public void WhenApplyingSerializedExpressionThenCreatesSameResultAsOriginalExpressionWithNotFlagsEnumComparison()
        {
            Func<FakeItem, bool> original = x => x.NotFlagsValue == NotFlags.Fine && x.IntValue >= 3;

            var factory = new FilterExpressionFactory(new MemberNameResolver(), Enumerable.Empty<IValueExpressionFactory>());
            var deserialized = factory.Create<FakeItem>("NotFlagsValue eq Highway.Data.Tests.OData.NotFlags'Fine' And IntValue ge 3");

            var originalResult = _collection.Where(original).ToArray();
            var deserializedResult = _collection.Where(deserialized.Compile()).ToArray();

            Assert.True(originalResult.SequenceEqual(deserializedResult));
        }
Beispiel #10
0
 public void Setup()
 {
     //Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
     _factory = new FilterExpressionFactory(new MemberNameResolver(), Enumerable.Empty <IValueExpressionFactory>());
 }
			public void Setup()
			{
				Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
				_factory = new FilterExpressionFactory(new MemberNameResolver(), Enumerable.Empty<IValueExpressionFactory>());
			}