public IEnumerable<ScheduleRecord> GetSchedules(string applicationName, IDbTransaction transaction)
{
const string Sql =
@"SELECT s.*, sj.*
FROM [BlueCollarSchedule] s
LEFT OUTER JOIN [BlueCollarScheduledJob] sj ON s.[Id] = sj.[ScheduleId]
WHERE
s.[ApplicationName] = @ApplicationName
ORDER BY sj.[Number];";
Dictionary<long, ScheduleRecord> lookup = new Dictionary<long, ScheduleRecord>();
List<ScheduleRecord> schedules = new List<ScheduleRecord>();
this.connection.Query<ScheduleRecord, ScheduledJobRecord, ScheduleRecord>(
Sql,
(s, sj) =>
{
ScheduleRecord schedule;
if (!lookup.ContainsKey(s.Id.Value))
{
lookup[s.Id.Value] = s;
schedules.Add(s);
schedule = s;
}
else
{
schedule = lookup[s.Id.Value];
}
if (sj != null)
{
schedule.ScheduledJobs.Add(sj);
sj.Schedule = schedule;
}
return schedule;
},
new { ApplicationName = applicationName },
transaction,
true,
"Id",
null,
null);
return schedules;
}