private Invoice CreateInvoice(Record record) { var invoice = new Invoice( record.Id, record.Client, record.Country.ToDomain()); var purchasedBooks = record.BooksInBasket .Select(b => { IBook book = b.Category.HasValue ? new EducationalBook(b.Name, b.Price, b.Author.ToDomain(), b.Language, b.Category.Value) : (IBook) new Novel(b.Name, b.Price, b.Author.ToDomain(), b.Language, b._Genre); return(new PurchasedBook(book, b.Quantity)); }) .ToList(); invoice.AddPurchasedBooks(purchasedBooks); return(invoice); }