when i tried to group by IQueryable i found that query was very very slowly and when i removed group by it return fast can any one help me
public async Task<GridOutPut<ticketSearchRes>> ticketGridView<T>(GridViewEntity gridViewInputsVM, gridViewSearch searchRes , int CurrentuserId)
{
List<ticketSearchRes> tickets = new List<ticketSearchRes>();
IQueryable<ticketSearchRes> source = (from ticket in _db.TblTicket
join ticketCycle in _db.TblTicketCycle on ticket.TicketId equals ticketCycle.TicketId where ticketCycle.IsVisable == 1
join ticketUser in _db.TblTicketUser on ticket.TicketId equals ticketUser.TicketId
where ticketUser.UserId == CurrentuserId || (ticketUser.UserId != CurrentuserId && ticket.CreatedBy == CurrentuserId)
group ticket by new { ticket.TicketId } into groupedTickets // grouped by here
select new ticketSearchRes
{
title = (groupedTickets.FirstOrDefault().TicketTitle != null) ? groupedTickets.FirstOrDefault().TicketTitle.ToString() : "",
ticId = groupedTickets.FirstOrDefault().ToString(),
encTicId = (groupedTickets.FirstOrDefault().TicketId.ToString() != null) ? groupedTickets.FirstOrDefault().TicketId.ToString() : "",
createdBy = (groupedTickets.FirstOrDefault().CreatedBy.ToString() != null) ? groupedTickets.FirstOrDefault().CreatedBy.ToString() : "",
}
).AsQueryable();
if (searchRes.title != "") // ticket title search for ID || Title || Description
{
source = source.Where(a => a.title.ToLower().Trim().Contains(searchRes.title) || a.description.ToLower().Trim().Contains(searchRes.title) || a.ticId.ToLower().Trim().Contains(searchRes.title));
}
if (searchRes.ticStatus != 0) { // ticket status
source = source.Where(a => a.status == searchRes.ticStatus.ToString());
}
if (searchRes.ticCategory != 0) // ticket category
{
source = source.Where(a => a.categoryId == searchRes.ticCategory.ToString());
}
return await source.SortFunctionAsync(tickets, gridViewInputsVM);
}