using System.Collections.Generic;
public static void Main()
var testData = TestDataset1;
var keyword = "software";
var booksWithKeyword = BooksWithWordInTitle(testData, keyword);
Console.WriteLine($"Books with {keyword} in the title:");
foreach(var book in booksWithKeyword)
Console.WriteLine($"\t{book.Name}");
var extractedAuthors = ExtractAuthors(testData);
foreach(var author in extractedAuthors)
Console.WriteLine(author.AuthorName);
foreach(var book in author.BookNames)
Console.WriteLine($"\t{book}");
public static IEnumerable<Book> BooksWithWordInTitle(Book[] books, string wordToFind)
return books.Where(x => x.Name.ToLower().Split(" ").Contains(wordToFind));
public static (string AuthorName, string[] BookNames)[] ExtractAuthors(Book[] books)
x.Authors.Select(a => new {
BookName = x.Name, AuthorName = a.Name }))
.GroupBy(x => x.AuthorName)
.Select(x => (x.Key, x.Select(b=>b.BookName).ToArray()))
public static Book[] TestDataset1 = new[]{
new Book { Name = "Design Patterns: Elements of Reusable Object-Oriented Software", Authors = new[] {
new Author {Name = "Erich Gamma" },
new Author {Name = "Richard Helm" },
new Author {Name = "Ralph Johnson" },
new Author {Name = "John Vlissides" },
new Author {Name = "Grady Booch" }}},
new Book { Name = "Unified Modeling Language User Guide", Authors = new[] { new Author {Name = "Grady Booch" } } },
new Book { Name = "The Annotated Turing", Authors = new[] { new Author {Name = "Charles Petzold" } } },
new Book { Name = "Code: The Hidden Language of Computer Hardware and Software", Authors = new[] { new Author {Name = "Charles Petzold" } } },
new Book { Name = "Balancing Agility and Discipline: A Guide for the Perplexed", Authors = new[] {
new Author {Name = "Barry Boehm" },
new Author {Name = "Grady Booch" } } }