Exemple #1
0
        public async Task BoundFunctionSingle()
        {
            List <int> expectedResult;

            using (var dbContext = Fixture.CreateContext())
                expectedResult = dbContext.OrderItems.Where(i =>
                                                            (i.Order.Name == "Order 1" || i.Order.Name == "Order 2") && i.Order.Customer.Country == "RU" && i.Order.Customer.Id == 1)
                                 .Select(i => i.Id).ToList();

            Db.OeDataAdapter dataAdapter = Fixture.OeEdmModel.GetDataAdapter(Fixture.OeEdmModel.EntityContainer);
            String           request     = $"Customers('RU',1)/{dataAdapter.DataContextType.Namespace}.BoundFunctionSingle(orderNames=['Order 1','Order 2'])?$expand=Customer,Items&$select=Name";

            ODataUri  odataUri = Fixture.ParseUri(request);
            IEdmModel edmModel = Fixture.OeEdmModel.GetEdmModel(odataUri.Path);
            var       parser   = new OeParser(odataUri.ServiceRoot, edmModel);

            var response = new MemoryStream();
            await parser.ExecuteQueryAsync(odataUri, OeRequestHeaders.JsonDefault, response, CancellationToken.None).ConfigureAwait(false);

            response.Position = 0;

            List <Object> fromOe = new ResponseReader(edmModel).Read(response).Cast <Object>().ToList();

            Assert.Equal(expectedResult, fromOe.SelectMany(c => (IEnumerable <dynamic>)((dynamic)c).Items).Select(i => (int)i.Id).OrderBy(id => id));
        }