public void DelayQueryOnFunctionImport() { TestClientContext.MergeOption = MergeOption.OverwriteChanges; //Post an Product var product = ProductPlus.CreateProductPlus(10001, "10001", "2", 2.0f, 2, true); product.SkinColorPlus = ColorPlus.RedPlus; product.UserAccessPlus = AccessLevelPlus.ExecutePlus | AccessLevelPlus.ReadPlus; TestClientContext.AddToProductsPlus(product); TestClientContext.SaveChanges(); //FunctionImport var getAllProductsFunction = TestClientContext.GetAllProductsPlus(); var products = getAllProductsFunction.ToList(); Assert.IsTrue(products.Count() > 0); Assert.IsTrue(getAllProductsFunction.RequestUri.OriginalString.EndsWith("/GetAllProducts()")); double unitPrice = products.First().UnitPricePlus; //GetEnumerator var discountAction = getAllProductsFunction.DiscountPlus(50); foreach (var p in discountAction) { Assert.AreEqual(unitPrice * 50 / 100, p.UnitPricePlus); break; } Assert.IsTrue(discountAction.RequestUri.OriginalString.EndsWith("/GetAllProducts()/Microsoft.Test.OData.Services.ODataWCFService.Discount")); //Filter after FunctionImport var filterAllProducts = getAllProductsFunction.Where(p => p.SkinColorPlus == ColorPlus.RedPlus) as DataServiceQuery <ProductPlus>; foreach (var p in filterAllProducts) { Assert.AreEqual(ColorPlus.RedPlus, p.SkinColorPlus); } Assert.IsTrue(filterAllProducts.RequestUri.OriginalString.EndsWith("/GetAllProducts()?$filter=SkinColor eq Microsoft.Test.OData.Services.ODataWCFService.Color'Red'")); //FunctionImport, return collection of primitivetype var getBossEmailsFunction = TestClientContext.GetBossEmailsPlus(0, 10); var emails = getBossEmailsFunction.Execute(); Assert.IsTrue(getBossEmailsFunction.RequestUri.OriginalString.EndsWith("/GetBossEmails(start=0,count=10)")); //FunctionImport, return Collection of primitivetype with enum parameter var productsNameQuery = TestClientContext.GetProductsByAccessLevelPlus(AccessLevelPlus.ReadPlus | AccessLevelPlus.ExecutePlus); var productsName = productsNameQuery.Execute(); Assert.IsTrue(Uri.UnescapeDataString(productsNameQuery.RequestUri.OriginalString).EndsWith("/GetProductsByAccessLevel(accessLevel=Microsoft.Test.OData.Services.ODataWCFService.AccessLevel'Read,Execute')")); Assert.IsTrue(productsName.Count() > 0); }