public async Task <List <PersonGroupModel> > GetAttendancesAsync(RecordFilterModel filter) { var date = (filter.Date ?? DateTime.Now).Date; var rawData = await( from grp in _dbContext.PersonGroup join per in _dbContext.Person on grp.Id equals per.GroupId join obj in _dbContext.Object on per.Key equals obj.PersonKey into persons from perObj in persons.DefaultIfEmpty() where (perObj == null || (perObj.CreateDate >= date && perObj.CreateDate <= date.AddDays(1))) select new { Group = grp, Person = per, Record = perObj }).ToListAsync(); var result = new List <PersonGroupModel>(); foreach (var data in rawData) { var group = result.FirstOrDefault(x => x.Id == data.Group.Id); if (group is null) { group = new PersonGroupModel(data.Group); result.Add(group); } var person = group.Records.FirstOrDefault(x => x.Id == data.Person.Id); if (person is null) { group.Records.Add(new RecordModel(data.Person, data.Record?.CreateDate)); } else if (data.Record?.CreateDate != null && person.CreateDate < data.Record.CreateDate) { person.CreateDate = data.Record.CreateDate; } } return(result); }
public async Task <ActionResult <List <PersonGroupModel> > > GetAttendancesAsync(RecordFilterModel filter) => await _service.GetAttendancesAsync(filter);