Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Select Clause Projection in C#
📖 Scenario: You work in a bookstore and have a list of books with their details. You want to create a simple list showing only the book titles and their prices.
🎯 Goal: Build a C# program that uses LINQ's select clause to create a new list containing only the titles and prices of books.
📋 What You'll Learn
Create a list of books with title, author, and price
Create a variable to hold the minimum price filter
Use a LINQ query with select clause to project only title and price
Print the projected list showing title and price
💡 Why This Matters
🌍 Real World
Selecting and projecting data is common when working with collections, such as filtering products in a store or showing user details in an app.
💼 Career
Understanding LINQ and data projection is important for C# developers working on data processing, reporting, or UI display tasks.
Progress0 / 4 steps
1
Create the list of books
Create a list called books of type List<Book> with these exact entries: new Book("The Hobbit", "J.R.R. Tolkien", 15.99m), new Book("1984", "George Orwell", 12.50m), new Book("Clean Code", "Robert C. Martin", 33.99m). Also define the Book class with public properties Title, Author, and Price.
C Sharp (C#)
Hint
Define a class Book with properties for title, author, and price. Then create a List<Book> with the given books.
2
Add a minimum price filter
Create a decimal variable called minPrice and set it to 13.00m.
C Sharp (C#)
Hint
Just create a decimal variable named minPrice and assign it the value 13.00m.
3
Use LINQ select clause to project title and price
Write a LINQ query called selectedBooks that selects from books only those with Price greater than or equal to minPrice. Use the select clause to create an anonymous type with properties Title and Price.
C Sharp (C#)
Hint
Use a LINQ query with from, where, and select clauses. The select clause should create an anonymous type with Title and Price.
4
Print the selected book titles and prices
Use a foreach loop to print each book's Title and Price from selectedBooks. Format the output as: Title: [Title], Price: [Price].
C Sharp (C#)
Hint
Use a foreach loop to go through selectedBooks and print each book's title and price using Console.WriteLine with string interpolation.
Practice
(1/5)
1. What does the select clause do in a LINQ query in C#?
easy
A. It groups the data by a key.
B. It filters the data based on a condition.
C. It sorts the data in ascending order.
D. It chooses and shapes the data to return from the query.
Solution
Step 1: Understand the role of select in LINQ
The select clause defines what data to return from the query, shaping the output.
Step 2: Differentiate from other clauses
Filtering is done by where, sorting by orderby, grouping by group by. Only select shapes the output.
Final Answer:
It chooses and shapes the data to return from the query. -> Option D
Quick Check:
Select clause = shapes output [OK]
Hint: Select clause shapes output data, not filters or sorts [OK]
Common Mistakes:
Confusing select with where clause
Thinking select sorts data
Mixing select with group by
2. Which of the following is the correct syntax for a LINQ query using select to get only the names from a list of Person objects?
easy
A. var names = from p in people select p.Name;
B. var names = from p in people where p.Name;
C. var names = from p in people orderby p.Name select p;
D. var names = from p in people group p by p.Name;
Solution
Step 1: Identify correct select syntax
The correct syntax to project only the Name property is select p.Name.
Step 2: Check other options for errors
var names = from p in people where p.Name; uses where incorrectly without a condition. var names = from p in people orderby p.Name select p; selects whole object, not just names. var names = from p in people group p by p.Name; groups data, not selects.
Final Answer:
var names = from p in people select p.Name; -> Option A
Quick Check:
Select projects properties correctly [OK]
Hint: Select clause syntax: from x in y select x.Property [OK]
Common Mistakes:
Using where without condition
Selecting whole object instead of property
Confusing group by with select
3. What is the output of this code?
var numbers = new[] {1, 2, 3};
var result = from n in numbers select n * 2;
foreach(var r in result) Console.Write(r + " ");
medium
A. 1 2 3
B. 3 4 5
C. 2 4 6
D. Syntax error
Solution
Step 1: Understand the select projection
The query multiplies each number by 2, so 1 becomes 2, 2 becomes 4, 3 becomes 6.
Step 2: Trace the output loop
The foreach prints each doubled number followed by a space: "2 4 6 "
Final Answer:
2 4 6 -> Option C
Quick Check:
Select doubles numbers = 2 4 6 [OK]
Hint: Select transforms each item; multiply 1,2,3 by 2 = 2,4,6 [OK]
Common Mistakes:
Thinking select filters instead of transforms
Expecting original numbers
Confusing output format
4. Identify the error in this LINQ query:
var people = new List<Person>();
var names = from p in people select p.Name.ToUpper;
medium
A. select clause must come before from clause.
B. Missing parentheses after ToUpper method call.
C. List<Person> cannot be queried with LINQ.
D. Cannot select Name property directly.
Solution
Step 1: Check method usage in select
ToUpper is a method and requires parentheses: ToUpper().
Step 2: Validate other options
Cannot select Name property directly. is wrong because selecting Name is valid. List<Person> cannot be queried with LINQ. is wrong because List supports LINQ. select clause must come before from clause. is wrong because from must come first.
Final Answer:
Missing parentheses after ToUpper method call. -> Option B
Quick Check:
Method calls need () [OK]
Hint: Method calls need parentheses, e.g., ToUpper() [OK]
Common Mistakes:
Forgetting () after method names
Misordering LINQ clauses
Thinking List can't use LINQ
5. Given a list of products with properties Name and Price, how would you use a LINQ select clause to create a new list of anonymous objects containing only Name and a discounted price (10% off)?
hard
A. var discounted = from p in products select new { p.Name, DiscountedPrice = p.Price * 0.9 };
B. var discounted = from p in products select p.Name, p.Price * 0.9;
C. var discounted = from p in products where p.Price > 0.9 select p.Name;
D. var discounted = from p in products select new List { p.Name, p.Price * 0.9 };
Solution
Step 1: Understand anonymous object creation in select
To create new shaped data, use new { } with property assignments inside select.
Step 2: Check each option's correctness
var discounted = from p in products select new { p.Name, DiscountedPrice = p.Price * 0.9 }; correctly creates anonymous objects with Name and discounted price. var discounted = from p in products select p.Name, p.Price * 0.9; syntax is invalid (multiple values without new). var discounted = from p in products where p.Price > 0.9 select p.Name; filters but does not create discounted price. var discounted = from p in products select new List { p.Name, p.Price * 0.9 }; tries to create a List incorrectly.
Final Answer:
var discounted = from p in products select new { p.Name, DiscountedPrice = p.Price * 0.9 }; -> Option A
Quick Check:
Select new anonymous objects with discounted price [OK]
Hint: Use new { } in select to create shaped objects [OK]