Search code examples
c#asp.net-web-apiodata

how to return a nested entity model from odata services


I'm implementing like ODataServiceSample.

It say, you can query a nested entity model like as

public class ProductFamily
{
    public ProductFamily()
    {
        Products = new List<Product>();
    }

    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual Supplier Supplier { get; set; }
    public virtual ICollection<Product> Products { get; set; }
}

but you can query partial, first request for main class

Container ctx = new Container();
foreach (var productFamily in ctx.ProductFamilies)
    Console.WriteLine("\t{0}-{1}: {2}", productFamily.ID, productFamily.Name, productFamily.Description);

second request for sub class

private static void Get_ProductFamily_Products()
    {
        Container ctx = new Container();
        var query = ctx.ProductFamilies.Where(p => p.ID == 3).SelectMany(p => p.Products);
        foreach (var product in query)
            Console.WriteLine("\t{0}-{1}", product.ID, product.Name);
    }

How to select all data in one query(request)?


Solution

  • To expand related entities, add Expand to your query. In your case it might be something like this:

    Container ctx = new Container();
    foreach (var productFamily in ctx.ProductFamilies.Expand("Products"))
    {
        Console.WriteLine("\t{0}-{1}: {2}", 
            productFamily.ID, productFamily.Name, productFamily.Description);
        foreach (var product in productFamily.Products)
        {
            Console.WriteLine("\t\t{0}-{1}", 
                product.ID, product.Name);
        }
    }