skip to Main Content

In my WebAPI, I’m using EF. I’m currently getting my data out using a LINQ statement.

My LINQ is:

var output = _context.CarMakes
.Select(x => new 
{
   id= x.CarId,
   make = x.CarMake,
   year = x.Year,
   status = x.Status 
});

my data is returned as:

[
     { 
        "id": 1,
        "make": "Ford",
         "year" : 2020,
        "model" : "Focus"
     },
     {
        "id" : 2,
        "make" :"Ford",
        "year" : 1994,
        "model" : "F-150"
     },
     {
       "id" : 3,
       "make" : "Chevy",
       "year" : 2022,
       "model" : "Silverado"
  
     }
   ]
 

How can I get it returned so it’s grouped so I can use it in a TreeView navigation menu such as: What changes should I make to the .NET code?

   Ford:
      2020
        Focus
       1994
         F-150
   Chevy
       2022
         Silverado
      
       

2

Answers


  1. you need to use group by to get the result needed, here is an example :

    var result = _context.CarMakes.GroupBy(x => x.make)
        .Select(g => new {
            Make = g.Key,
            Models = g.GroupBy(x => x.year)
                .Select(y => new {
                    Year = y.Key,
                    Name = y.Select(z => z.model)
                })
        });
    
    Login or Signup to reply.
  2. You have to perform group by on make and year fields and then select all the cars that come under those grouping. Then in the front end, you can use this returned data to make a nested tree view.

    var output = _context.CarMakes
        .Select(x => new
        {
            id = x.CarId,
            make = x.CarMake,
            year = x.Year,
            status = x.Status
        })
        .GroupBy(x => new { x.make, x.year })
        .Select(g => new
        {
            make = g.Key.make,
            year = g.Key.year,
            cars = g.Select(x => new { id = x.id, status = x.status })
        });
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search