group by非常缓慢-实体框架核心

时间:2019-07-23 10:06:42

标签: asp.net-core entity-framework-core

当我尝试按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);
        }

0 个答案:

没有答案