private static async Task <int> InsertRegularsAndVolunteers( IImmutableList <CheckInsUpdate> regularPreCheckIns, KidsTownContext db ) { var kids = regularPreCheckIns .Select(selector: c => c.Kid) .GroupBy(keySelector: p => p.PeopleId).Select(selector: p => p.First()) .ToImmutableList(); var existingPeople = await CommonRepository.GetKidsByPeopleIds( db : db, peopleIds : kids.Where(predicate : p => p.PeopleId.HasValue) .Select(selector : p => p.PeopleId !.Value).ToImmutableList()) .ConfigureAwait(continueOnCapturedContext : false); var peopleUpdates = kids.Where( predicate: p => existingPeople.Select(selector: e => e.PeopleId).Contains(value: p.PeopleId)) .ToImmutableList(); var kidsInserts = kids.Except(second: peopleUpdates).ToImmutableList(); var insertedPeople = await InsertPeople(db : db, peopleToInsert : kidsInserts) .ConfigureAwait(continueOnCapturedContext: false); var checkIns = regularPreCheckIns .Select(selector: c => MapToAttendance(checkInsUpdate: c, people: existingPeople.Union(second: insertedPeople).ToImmutableList())) .ToImmutableList(); await db.AddRangeAsync(entities : checkIns).ConfigureAwait(continueOnCapturedContext: false); return(await db.SaveChangesAsync().ConfigureAwait(continueOnCapturedContext: false)); }
private static async Task <List <Attendance> > GetAttendances( IImmutableList <int> attendanceIds, KidsTownContext db) { var attendances = await db.Attendances.Where(predicate : a => attendanceIds.Contains(a.Id)).ToListAsync().ConfigureAwait(continueOnCapturedContext: false); return(attendances); }
public static async Task <List <Person> > GetKidsByPeopleIds( KidsTownContext db, IImmutableList <long> peopleIds ) { return(await db.People .Where(predicate : p => p.PeopleId.HasValue && peopleIds.Contains(p.PeopleId.Value)) .Include(navigationPropertyPath: p => p.Kid) .ToListAsync() .ConfigureAwait(continueOnCapturedContext: false)); }
private static async Task <IImmutableList <Person> > GetExistingParents( IImmutableList <long> peopleIds, KidsTownContext db ) { var parents = await db.People .Where(predicate : p => p.PeopleId != null && peopleIds.Contains(p.PeopleId.Value)) .Include(navigationPropertyPath: p => p.Adult) .Include(navigationPropertyPath: p => p.Family) .ToListAsync() .ConfigureAwait(continueOnCapturedContext: false); return(parents.ToImmutableList()); }
private static async Task <List <Person> > InsertPeople( KidsTownContext db, IImmutableList <PeopleUpdate> peopleToInsert ) { var people = peopleToInsert.Select(selector: MapPerson).ToImmutableList(); await db.AddRangeAsync(entities : people).ConfigureAwait(continueOnCapturedContext: false); await db.SaveChangesAsync().ConfigureAwait(continueOnCapturedContext: false); var insertedPeople = await db.People .Where(predicate : p => peopleToInsert.Select(i => i.PeopleId).Contains(p.PeopleId)) .ToListAsync().ConfigureAwait(continueOnCapturedContext: false); return(insertedPeople); }