Пример #1
0
        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);
        }
Пример #2
0
 public async Task <ActionResult <List <PersonGroupModel> > > GetAttendancesAsync(RecordFilterModel filter) =>
 await _service.GetAttendancesAsync(filter);