Skip to content

Results projection, paging and ordering

Jason Finch edited this page Aug 23, 2018 · 13 revisions

Simple.OData.Client supports all standard OData query modifiers that can be used to control number of rows and columns fetched during the request execution.


Retrieve ProductID for all products

Untyped syntax

var products = await client
    .For("Products")
    .Select("ProductID")
    .FindEntriesAsync();
Assert.True(products.First()["ProductID"] > 0);
Assert.False(products.First().ContainsKey("ProductName"));

Typed syntax

var products = await client
    .For<Products>()
    .Select(x => x.ProductID)
    .FindEntriesAsync();
Assert.True(products.First().ProductID > 0);

Dynamic syntax

IEnumerable<dynamic> products = await client
    .For(x.Products)
    .Select(x.ProductID)
    .FindEntriesAsync();
Assert.True(products.First().ProductID > 0);

Request URI: GET Products?$select=ProductID


Retrieve only the first row from the Products collection

Untyped syntax

var products = await client
    .For("Products")
    .Top(1)
    .FindEntriesAsync();
Assert.Equal(1, products.Count());

Typed syntax

var products = await client
    .For<Products>()
    .Top(1)
    .FindEntriesAsync();
Assert.Equal(1, products.Count());

Dynamic syntax

var products = await client
    .For("Products")
    .Top(1)
    .FindEntriesAsync();
Assert.Equal(1, products.Count());

Request URI: GET Products?$top=1


Retrieve all except the first row from the Products collection

Untyped syntax

var products = await client
    .For("Products")
    .Skip(1)
    .FindEntriesAsync();
Assert.Equal(76, products.Count());

Typed syntax

var products = await client
    .For<Products>()
    .Skip(1)
    .FindEntriesAsync();
Assert.Equal(76, products.Count());

Dynamic syntax

var products = await client
    .For(x.Products)
    .Skip(1)
    .FindEntriesAsync();
Assert.Equal(76, products.Count());

Request URI: GET Products?$skip=1


Skip two and retrieve one row from the Products collection

Untyped syntax

var products = await client
    .For("Products")
    .Skip(2)
    .Top(1)
    .FindEntriesAsync();
Assert.Equal(1, products.Count());

Typed syntax

var products = await client
    .For<Products>()
    .Skip(2)
    .Top(1)
    .FindEntriesAsync();
Assert.Equal(1, products.Count());

Dynamic syntax

IEnumerable<dynamic> products = await client
    .For(x.Products)
    .Skip(2)
    .Top(1)
    .FindEntriesAsync();
Assert.Equal(1, products.Count());

Request URI: GET Products?$skip=2&$top=1


Retrieve all products ordered by product name

Untyped syntax

var products = await client
    .For("Products")
    .OrderBy("ProductName")
    .FindEntriesAsync();
Assert.Equal("Alice Mutton", products.First()["ProductName"]);

Typed syntax

var products = await client
    .For<Products>()
    .OrderBy(x => x.ProductName)
    .FindEntriesAsync();
Assert.Equal("Alice Mutton", products.First().ProductName);

Dynamic syntax

IEnumerable<dynamic> products = await client
    .For(x.Products)
    .OrderBy(x.ProductName)
    .FindEntriesAsync();
Assert.Equal("Alice Mutton", products.First().ProductName);

Request URI: GET Products?$orderby=ProductName


Retrieve all products ordered descending by product name

Untyped syntax

var products = await client
    .For("Products")
    .OrderByDescending("ProductName")
    .FindEntriesAsync();
Assert.Equal("Zaanse koeken", products.First()["ProductName"]);

Typed syntax

var products = await client
    .For<Products>()
    .OrderByDescending(x => x.ProductName)
    .FindEntriesAsync();
Assert.Equal("Zaanse koeken", products.First().ProductName);

Dynamic syntax

IEnumerable<dynamic> products = await client
    .For(x.Products)
    .OrderByDescending(x.ProductName)
    .FindEntriesAsync();
Assert.Equal("Zaanse koeken", products.First().ProductName);

Request URI: GET Products?$orderby=ProductName%20desc


Retrieve product names in descending order

Untyped syntax

var products = await client
    .For("Products")
    .OrderByDescending("ProductName")
    .Select("ProductName")
    .FindEntriesAsync();
Assert.Equal("Zaanse koeken", products.First()["ProductName"]);

Typed syntax

var products = await client
    .For<Products>()
    .OrderByDescending(x => x.ProductName)
    .Select(x => x.ProductName)
    .FindEntriesAsync();
Assert.Equal("Zaanse koeken", products.First().ProductName);

Dynamic syntax

IEnumerable<dynamic> products = await client
    .For(x.Products)
    .OrderByDescending(x.ProductName)
    .Select(x.ProductName)
    .FindEntriesAsync();
Assert.Equal("Zaanse koeken", products.First().ProductName);

Request URI: GET Products?$orderby=ProductName%20desc&$select=ProductName


See also:
Retrieving data