public async Task ExportAsync(Guid competitionId, Stream stream, CultureInfo culture) { var data = new VantageSyncData(); using (var context = contextFactory()) { data.Competition = await context.Competitions .Include(c => c.ReportTemplate.Logos) .Include(c => c.CompetitorLists.Select(cl => cl.Competitors.Select(co => co.DistanceCombinations))) .Include(c => c.Distances.Select(d => d.Races.Select(r => r.Results))) .Include(c => c.Distances.Select(d => d.Races.Select(r => r.Times))) .Include(c => c.Distances.Select(d => d.Races.Select(r => r.Laps))) .Include(c => c.Distances.Select(d => d.Races.Select(r => r.Passings))) .Include(c => c.Distances.Select(d => d.DistancePointsTable.Points)) .Include(c => c.DistanceCombinations.Select(dc => dc.Distances)) .FirstOrDefaultAsync(c => c.Id == competitionId); await context.TeamCompetitorMembers .Include(tcm => tcm.Member) .Where(tcm => tcm.Team.List.CompetitionId == competitionId).LoadAsync(); var projection = await context.Competitors.OfType <PersonCompetitor>() .Where(p => p.List.CompetitionId == competitionId) .Select(p => new { p.Person, Licenses = p.Person.Licenses.Where(l => p.List.Competition.Discipline.StartsWith(l.Discipline)) }) .ToListAsync(); data.People = projection.Select(p => p.Person).ToList(); } VantageXml.Save(data, stream); }
public static void Save(VantageSyncData data, Stream stream) { using (stream) using (var memoryStream = new MemoryStream()) { Serializer.WriteObject(memoryStream, data); memoryStream.Position = 0; memoryStream.CopyTo(stream); stream.Flush(); } }