使用 groupby 和 first() 改进 linq 查询

问题描述 投票:0回答:0

我有一个 linq 查询,我正在对其进行分组并检索第一个结果,我认为问题正在发生并且查询超时以获取更多数据:

这是查询:

    var result = await base.GetAllPagedAndSortedQueryBuilder(input)
                .Include(x => x.Person)
                .WhereIf(input.EventId.HasValue, x => x.Race.EventId == input.EventId)
                .GroupBy(x => new { x.JuryRoleId, x.PersonId }).Select(s => new RaceJuryDto
                {
                    Id = s.First().Id,
                    Distance = s.Sum(r => Convert.ToDouble(r.Distance)).ToString(),
                    PersonId = s.First().Person.Guid,
                    Status = s.First().Status,
                    JuryRoleId = s.First().JuryRoleId,
                    JuryPersonId = s.First().Person.Id,
                    CountRacesJury = s.GroupBy(s => s.JuryRoleId).Count(),
                    AddressCity = s.First().Person.Address.City,
                    RaceIds = s.Select(s => s.RaceId).ToList(),
                    RaceJuryIds = s.Select(s => s.Id).ToList()
                }).ToListAsync();

它在数据不多的情况下工作“正常”,但是当我们针对更大的数据集进行测试时会超时。我认为问题是在为每个属性调用 First() 时。

有人建议如何处理这个问题以及我如何改进查询吗?

linq entity-framework-core orm linq-to-entities
© www.soinside.com 2019 - 2024. All rights reserved.