-
Notifications
You must be signed in to change notification settings - Fork 202
Expanding results with linked entries
Using Expand clause it's possible to expand results with associated data. Expanded entries must be defined as relationships in OData service schema.
Untyped syntax
var category = client
.For("Categories")
.Filter("CategoryName+eq+%27Beverages%27")
.Expand("Products")
.FindEntry();
Assert.Equal("Beverages", category["CategoryName"]);
Assert.True((category.Products as IEnumerable<object>).Count() > 0);
Typed syntax
var category = client
.For<Categories>()
.Filter(x => x.CategoryName == "Beverages")
.Expand<Products>()
.FindEntry();
Assert.Equal("Beverages", category.CategoryName);
Assert.True(category.Products.Count() > 0);
Dynamic syntax
var x = ODataFilter.Expression;
var category = client
.For(x.Categories)
.Filter(x.CategoryName == "Beverages")
.Expand(x.Products)
.FindEntry();
Assert.Equal("Beverages", category.CategoryName);
Assert.True((category.Products as IEnumerable<object>).Count() > 0);
Request URI: GET Categories?$filter=CategoryName+eq+%27Beverages%27&$expand=Products&$top=1
Untyped syntax
var categories = client
.For("Categories")
.Expand("Products")
.FindEntries();
Assert.True(categories.Count > 0);
Assert.True((categories[0]["Products"] as IEnumerable<object>).Count() > 0);
Typed syntax
var categories = client
.For<Categories>()
.Expand<Products>()
.FindEntries();
Assert.True(categories.Count() > 0);
Assert.True(categories.First().Products.Count() > 0);
Dynamic syntax
var x = ODataDynamic.Expression;
IEnumerable<dynamic> categories = client
.For(x.Categories)
.Expand(x.Products)
.FindEntries();
Assert.True(categories.Count() > 0);
Assert.True((categories.First().Products as IEnumerable<object>).Count() > 0);
Request URI: GET Categories?expand=Products
Untyped syntax
var products = client
.For("Products")
.Expand("Category")
.FindEntries();
Assert.True(products.Count > 0);
Assert.Equal("Beverages", (products[0]["Category"] as IDictionary<string, object>)["CategoryName"]);
Typed syntax
var products = client
.For<Products>()
.Expand(x => x.Category)
.FindEntries();
Assert.True(products.Count() > 0);
Assert.Equal("Beverages", products.First().Category.CategoryName);
Dynamic syntax
var x = ODataDynamic.Expression;
IEnumerable<dynamic> products = client
.For(x.Products)
.Expand(x.Category)
.FindEntries();
Assert.True(products.Count() > 0);
Assert.Equal("Beverages", products.First().Category.CategoryName);
Request URI: GET Products?$expand=Category
Untyped syntax
var customer = client
.For("Customers")
.Get("ALFKI")
.Expand("Orders")
.FindEntry();
Assert.Equal("ALFKI", customer["CustomerID"]);
Assert.True(customer.Orders.Count > 0);
Typed syntax
var customer = client
.For<Customers>()
.Get("ALFKI")
.Expand<Orders>()
.FindEntry();
Assert.Equal("ALFKI", customer.CustomerID);
Assert.True(customer.Orders.Count() > 0);
Dynamic syntax
var x = ODataDynamic.Expression;
var customer = client
.For(x.Customers)
.Get("ALFKI")
.Expand(x.Orders)
.FindEntry();
Assert.Equal("ALFKI", customer.CustomerID);
Assert.True((customer.Orders as IEnumerable<object>).Count() > 0);
Request URI: GET Customers(%27ALFKI%27)?$expand=Orders
Untyped syntax
var employees = client
.For("Employees")
.Expand("Subordinates")
.FindEntries();
Assert.True(employees.Count > 0);
Assert.True((employees[0]["Subordinates"] as IEnumerable<object>).Count() == 0);
Assert.True((employees[0]["Subordinates"] as IEnumerable<object>).Count() > 0);
Typed syntax
var employees = client
.For<Employees>()
.Expand(x => x.Subordinates)
.FindEntries();
Assert.True(employees.Count() > 0);
Assert.True(employees.First().Subordinates.Count() == 0);
Assert.True(employees.First().Subordinates.Count() > 0);
Dynamic syntax
var x = ODataDynamic.Expression;
IEnumerable<dynamic> employees = client
.For(x.Employees)
.Expand(x.Subordinates)
.FindEntries();
Assert.True(employees.Count > 0);
Assert.True((employees.First().Subordinates as IEnumerable<object>).Count() == 0);
Assert.True((employees.First().Subordinates as IEnumerable<object>).Count() > 0);
Request URI: GET Employees?$expand=Subordinates
Untyped syntax
var employee = client
.For("Employees")
.Filter("(FirstName+eq+%27Nancy%27+and+LastName+eq+%27Davolio%27)")
.Expand("Superior")
.FindEntries();
Assert.NotNull(employee);
Assert.NotNull(employee["Superior"]);
Typed syntax
var employee = client
.For<Employees>()
.Filter(x => x.FirstName == "Nancy" && x.LastName == "Davolio")
.Expand(x => x.Superior)
.FindEntries();
Assert.NotNull(employee);
Assert.NotNull(employee.Superior);
Dynamic syntax
var x = ODataFilter.Expression;
var employee = client
.For(x.Employees)
.Filter(x.FirstName == "Nancy" && x.LastName == "Davolio")
.Expand(x.Superior)
.FindEntries();
Assert.NotNull(employee);
Assert.NotNull(employee.Superior);
Request URI: GET Employees?$filter=(FirstName+eq+%27Nancy%27+and+LastName+eq+%27Davolio%27)&$expand=Superior&$top=1
See also:
Retrieving linked entries without fetching its owners
Retrieving data