static void Main(string[] args) { DateTime startTime = DateTime.Now; Dictionary<Guid, string> memberIds = null; using (var context = new KcsarContext()) { memberIds = context.Members.OrderBy(f => f.LastName).ThenBy(f => f.FirstName).ToDictionary(f => f.Id, f => f.LastName + ", " + f.FirstName); } foreach (var pair in memberIds) { using (var ctx = new KcsarContext()) { Console.WriteLine(pair.Value); ctx.RecalculateTrainingAwards(pair.Key, DateTime.Now); ctx.SaveChanges(); } } Console.WriteLine("Execution time: {0}", (DateTime.Now - startTime)); }
static void Main(string[] args) { using (var db = new KcsarContext()) { DateTime cutoff = DateTime.Today.AddYears(1); var course = db.TrainingCourses.Single(f => f.DisplayName == "HAM License"); var hams = db.PersonContact.Where(f => f.Type == "hamcall") .Where(f => ! f.Person.ComputedAwards.Any(g => g.Expiry > cutoff && g.Course.Id == course.Id)) .Select(f => new { Member = f.Person, Call = f.Value }) .OrderBy(f => f.Member.LastName).ThenBy(f => f.Member.FirstName).ToArray(); foreach (var ham in hams) { Console.WriteLine(ham.Call); var lic = GetLicense(ham.Call); if (lic == null) { Console.WriteLine("!! No license found"); continue; } if (lic.Name.StartsWith(ham.Member.ReverseName, StringComparison.OrdinalIgnoreCase)) { // probably a match Console.WriteLine("Grant HAM to {0}, effective {1:yyyy-MM-dd}, expires {2:yyyy-MM-dd}", ham.Member.FullName, lic.Issued, lic.Expires); TrainingAward ta = new TrainingAward { Completed = lic.Issued, Course = course, Expiry = lic.Expires, Member = ham.Member, metadata = "Via FCC: " + lic.Url, LastChanged = DateTime.Now, ChangedBy = "HamFromFCC" }; db.TrainingAward.Add(ta); db.SaveChanges(); db.RecalculateTrainingAwards(ham.Member.Id); db.SaveChanges(); } else { Console.WriteLine("Can't match names: {0} :: {1}", lic.Name, ham.Member.ReverseName); } } } }