📖 Scenario: You work with a list of products in a store. You want to find products that cost less than a certain price. Using LINQ makes this easy, but you also want to understand how to write it efficiently.
🎯 Goal: Build a simple C# program that uses LINQ to filter products by price, and learn how to write it in a way that is clear and performs well.
📋 What You'll Learn
Create a list of products with names and prices
Set a price limit variable
Use LINQ query syntax to select products cheaper than the limit
Print the filtered product names
💡 Why This Matters
🌍 Real World
Filtering lists of products or data quickly and clearly is common in apps like online stores or inventory systems.
💼 Career
Understanding LINQ and how to write efficient queries is important for C# developers working with data collections.
Progress0 / 4 steps
1
Create the product list
Create a List<Product> called products with these exact entries: new Product("Pen", 5), new Product("Notebook", 15), new Product("Eraser", 3), new Product("Backpack", 50).
C Sharp (C#)
Hint
Use List<Product> and add the products inside curly braces.
2
Set the price limit
Create an int variable called priceLimit and set it to 10.
C Sharp (C#)
Hint
Use int priceLimit = 10; to create the variable.
3
Filter products with LINQ
Use a LINQ query with from, where, and select to create a variable called cheapProducts that selects products from products where Price < priceLimit.
C Sharp (C#)
Hint
Use the LINQ query syntax with from, where, and select.
4
Print the filtered product names
Use a foreach loop to print the Name of each product in cheapProducts using System.Console.WriteLine(product.Name).
C Sharp (C#)
Hint
Use a foreach loop and Console.WriteLine(product.Name) inside it.
Practice
(1/5)
1. What is a common performance consideration when using LINQ in C#?
easy
A. LINQ automatically caches all query results.
B. LINQ always executes queries immediately when defined.
C. LINQ queries are executed only when their results are requested.
D. LINQ does not support filtering collections.
Solution
Step 1: Understand LINQ query execution
LINQ uses deferred execution, meaning queries run only when results are requested.
Step 2: Compare options with LINQ behavior
The statement that LINQ queries are executed only when their results are requested correctly states deferred execution. The other options are incorrect because LINQ does not cache automatically, does not execute immediately when defined, and does support filtering collections.
Final Answer:
LINQ queries are executed only when their results are requested. -> Option C
Quick Check:
Deferred execution = LINQ queries are executed only when their results are requested. [OK]
Hint: Remember LINQ runs queries only when you ask for results [OK]
Common Mistakes:
Assuming LINQ runs queries immediately when defined
Thinking LINQ caches results automatically
Believing LINQ cannot filter collections
2. Which of the following is the correct syntax to force immediate execution of a LINQ query in C#?
easy
A. var result = query.ToList();
B. var result = query.Where(x => x > 5);
C. var result = query.Select(x => x * 2);
D. var result = query.OrderBy(x => x);
Solution
Step 1: Identify methods that trigger immediate execution
Methods like ToList() force LINQ to execute immediately and return a list.
Step 2: Analyze each option
var result = query.ToList(); uses ToList(), which triggers execution. Where, Select, and OrderBy return queryable objects and do not execute immediately.
Final Answer:
var result = query.ToList(); -> Option A
Quick Check:
ToList() triggers execution = var result = query.ToList(); [OK]
Hint: Use ToList() to run LINQ query immediately [OK]
Common Mistakes:
Using Where, Select, or OrderBy expecting immediate execution
Not knowing ToList() triggers execution
Confusing query definition with execution
3. Consider the following code:
var numbers = new List<int> {1, 2, 3, 4, 5};
var query = numbers.Where(n => n > 2);
var count1 = query.Count();
var count2 = query.Count();
What is the performance implication of this code?
medium
A. The query throws an exception on second Count() call.
B. The query is executed once and cached automatically.
C. The query results are stored in a list by default.
D. The query is executed twice, causing repeated filtering.
Solution
Step 1: Understand deferred execution and repeated calls
Each call to Count() on a LINQ query triggers execution, so query runs twice here.
Step 2: Analyze caching behavior
LINQ does not cache results automatically, so repeated calls cause repeated work.
Final Answer:
The query is executed twice, causing repeated filtering. -> Option D
Quick Check:
Repeated calls rerun query = The query is executed twice, causing repeated filtering. [OK]
Hint: Repeated calls rerun LINQ unless results are cached [OK]
Common Mistakes:
Assuming LINQ caches results automatically
Thinking Count() returns cached value on second call
Believing query throws exceptions on multiple calls
4. Identify the performance issue in this code snippet:
var data = Enumerable.Range(1, 1000);
var filtered = data.Where(x => x % 2 == 0);
var list1 = filtered.ToList();
var list2 = filtered.ToList();
medium
A. The filtered query is executed twice, causing duplicate work.
B. ToList() does not execute the query.
C. The Where clause is ignored due to deferred execution.
D. Enumerable.Range creates an empty collection.
Solution
Step 1: Understand ToList() effect on query execution
Each ToList() call executes the query fully, so filtered runs twice here.
Step 2: Identify repeated execution impact
Repeated execution wastes resources; caching results in a variable avoids this.
Final Answer:
The filtered query is executed twice, causing duplicate work. -> Option A
Quick Check:
Multiple ToList() calls rerun query = The filtered query is executed twice, causing duplicate work. [OK]
Hint: Cache ToList() result to avoid running query twice [OK]
Common Mistakes:
Thinking ToList() does not execute query
Believing Where clause is ignored
Assuming Enumerable.Range creates empty list
5. You have a LINQ query that filters and sorts a large collection multiple times in your code. What is the best way to improve performance?
hard
A. Rewrite the query each time to ensure fresh data is processed.
B. Store the filtered and sorted results in a list once, then reuse that list.
C. Avoid using ToList() to keep queries deferred for better performance.
D. Use multiple Where clauses instead of combining filters.
Solution
Step 1: Recognize repeated query execution cost
Running the same LINQ query multiple times causes repeated filtering and sorting, which is expensive.
Step 2: Apply caching to improve performance
Storing results in a list with ToList() once and reusing it avoids repeated work and improves speed.
Final Answer:
Store the filtered and sorted results in a list once, then reuse that list. -> Option B
Quick Check:
Caching query results = Store the filtered and sorted results in a list once, then reuse that list. [OK]
Hint: Cache query results with ToList() to reuse and save time [OK]
Common Mistakes:
Re-running queries multiple times without caching
Avoiding ToList() thinking deferred is always faster
Splitting filters unnecessarily causing overhead
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.