Challenge 2: Querying Overdue Loans with the IsOverdue() Extension Method — Possible Solution ==================================================================== Program.cs: var loans = new Repository(); loans.Add(new Loan("001", "Alice", DateTime.Now.AddDays(7))); // not overdue loans.Add(new Loan("002", "Bob", DateTime.Now.AddDays(-2))); // overdue loans.Add(new Loan("003", "Carol", DateTime.Now.AddDays(-10))); // overdue var overdueLoans = loans.Where(l => l.IsOverdue()); foreach (var loan in overdueLoans) { Console.WriteLine(loan); } Output: Loan { Isbn = 002, Borrower = Bob, DueDate = ... } Loan { Isbn = 003, Borrower = Carol, DueDate = ... } Explanation: loans.Where(l => l.IsOverdue()) uses the extension method IsOverdue() (csharp2-7) as the predicate passed into Repository's own LINQ-backed Where() (csharp2-2). Only Bob's and Carol's loans, whose DueDate is in the past, satisfy IsOverdue() and appear in the result. Each printed loan uses the record's own free ToString() (csharp2-5), with no manual formatting code written anywhere. WHY THIS WORKS AS AN ANSWER ------------------------------ This combines LINQ filtering with the extension method inside the predicate itself, exactly the composition the chapter's own capstone demonstrates, and relies on the record's automatic ToString() for output.