public async Task <IActionResult> GetVehicle([FromBody] IQueryableVehicle queryObj) { var query = context.Vehicles.Include(v => v.Model).Include(v => v.Features).Include(v => v.Contact).OrderByDescending(v => v.Id).AsQueryable(); query = query.ApplyFiltering(queryObj); //if (queryObj.SortBy == "contatName") // query = (queryObj.IsSortAscending) ? query.OrderBy(v => v.Contact.ContactName) : query.OrderByDescending(v => v.Contact.ContactName); //else if (queryObj.SortBy == "model") // query = (queryObj.IsSortAscending) ? query.OrderBy(v => v.ModelId) : query.OrderByDescending(v => v.ModelId); //else if (queryObj.SortBy == "make") // query = (queryObj.IsSortAscending) ? query.OrderBy(v => v.Model.MakeID) : query.OrderByDescending(v => v.Model.MakeID); //else // query = (queryObj.IsSortAscending) ? query.OrderBy(v => v.Id) : query.OrderByDescending(v => v.Id); Dictionary <string, Expression <Func <Vehicle, Object> > > columnsMap = new Dictionary <string, Expression <Func <Vehicle, Object> > >() { ["make"] = v => v.Model.MakeID, ["model"] = v => v.Model.Id, ["contactName"] = v => v.Contact.ContactName, ["id"] = v => v.Id }; //IQueryable queryable = query.AsQueryable(); query = query.ApplyOrdering(queryObj, columnsMap); query = query.ApplyPaging(queryObj); return(Ok(query)); }
public static IQueryable <Vehicle> ApplyFiltering(this IQueryable <Vehicle> query, IQueryableVehicle queryObj) { if (queryObj.MakeId.HasValue) { query = query.Where(v => v.Model.MakeID == queryObj.MakeId); } if (queryObj.ModelId.HasValue) { query = query.Where(v => v.ModelId == queryObj.ModelId); } return(query); }