当我尝试按IQueryable分组时,我发现查询非常缓慢 当我通过它删除组时快速返回 谁能帮我
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);
}