📖 Scenario: Imagine you work in a company that manages a large list of books in a library. You need to find books based on different conditions quickly and clearly. Using advanced LINQ helps you write simple and readable code to get exactly what you want from big data collections.
🎯 Goal: You will build a small C# program that uses advanced LINQ queries to filter and select books from a list based on specific conditions.
📋 What You'll Learn
Create a list of books with title, author, and year
Add a variable to set a year threshold
Use LINQ to find books published after the threshold year
Print the filtered list of book titles
💡 Why This Matters
🌍 Real World
Filtering and selecting data from collections is common in apps like libraries, stores, or social media feeds.
💼 Career
Knowing advanced LINQ helps developers write clean, efficient code to handle data queries in real projects.
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", 1937), new Book("1984", "George Orwell", 1949), new Book("Clean Code", "Robert C. Martin", 2008).
C Sharp (C#)
Hint
Use List<Book> and add the three books exactly as shown.
2
Add a year threshold
Create an integer variable called yearThreshold and set it to 1950.
C Sharp (C#)
Hint
Just create a simple integer variable with the exact name and value.
3
Use LINQ to filter books
Use LINQ with a var variable called recentBooks to select books from books where the Year is greater than yearThreshold. Use a LINQ query expression with from, where, and select.
C Sharp (C#)
Hint
Use a LINQ query expression with from, where, and select keywords exactly as shown.
4
Print the filtered book titles
Use a foreach loop with variable book to iterate over recentBooks and print each book's Title using Console.WriteLine.
C Sharp (C#)
Hint
Use a foreach loop and Console.WriteLine(book.Title) to print each title.
Practice
(1/5)
1. What is the main benefit of using advanced LINQ in C# programming?
easy
A. It automatically fixes bugs in your code.
B. It makes the program run faster by using less memory.
C. It replaces the need for any loops in your program.
D. It simplifies complex data queries into readable code.
Solution
Step 1: Understand LINQ's purpose
LINQ is designed to query and manipulate data collections easily.
Step 2: Identify the main benefit
Advanced LINQ makes complex data queries simpler and more readable.
Final Answer:
It simplifies complex data queries into readable code. -> Option D
Quick Check:
Advanced LINQ = Simplifies queries [OK]
Hint: Think: LINQ turns complex data tasks into simple code [OK]
Common Mistakes:
Confusing LINQ with performance optimization
Believing LINQ fixes bugs automatically
Thinking LINQ removes all loops
2. Which of the following is the correct syntax to filter a list of numbers using LINQ to select only even numbers?
easy
A. var evens = numbers.Select(n => n % 2 == 0);
B. var evens = numbers.Where(n => n % 2 == 0);
C. var evens = numbers.Filter(n => n % 2 == 0);
D. var evens = numbers.FindAll(n => n % 2 == 0);
Solution
Step 1: Identify LINQ filtering method
The correct LINQ method to filter is Where.
Step 2: Check syntax correctness
numbers.Where(n => n % 2 == 0) correctly filters even numbers.
Final Answer:
var evens = numbers.Where(n => n % 2 == 0); -> Option B
Quick Check:
Filter with Where = var evens = numbers.Where(n => n % 2 == 0); [OK]
Hint: Use Where for filtering in LINQ [OK]
Common Mistakes:
Using Select instead of Where for filtering
Using non-existent Filter method
Confusing FindAll (List method) with LINQ
3. What will be the output of this code?
var numbers = new List<int> {1, 2, 3, 4, 5};
var result = numbers.Where(n => n > 3).Select(n => n * 2);
foreach(var num in result) Console.Write(num + " ");
medium
A. 6 8 10
B. 4 6 8 10
C. 8 10
D. 2 4 6 8 10
Solution
Step 1: Filter numbers greater than 3
From the list {1,2,3,4,5}, numbers > 3 are 4 and 5.
Step 2: Multiply filtered numbers by 2
4 * 2 = 8, 5 * 2 = 10.
Final Answer:
8 10 -> Option C
Quick Check:
Filter >3 then *2 = 8 10 [OK]
Hint: Filter first, then transform with Select [OK]
Common Mistakes:
Multiplying before filtering
Including numbers not > 3
Confusing Select and Where order
4. Identify the error in this LINQ query:
var names = new List<string> {"Anna", "Bob", "Cathy"};
var result = names.Select(n => n.StartsWith("A"));
Console.WriteLine(string.Join(", ", result));
medium
A. The Select method should be Where to filter names starting with 'A'.
B. The StartsWith method is used incorrectly and causes a syntax error.
C. The string.Join method cannot join boolean values.
D. The list initialization syntax is wrong.
Solution
Step 1: Understand Select vs Where
Select transforms each item; Where filters items based on condition.
Step 2: Identify correct method for filtering
To get names starting with 'A', use Where, not Select.
Final Answer:
The Select method should be Where to filter names starting with 'A'. -> Option A
Quick Check:
Filter with Where, not Select [OK]
Hint: Use Where to filter, Select to transform [OK]
Common Mistakes:
Using Select instead of Where for filtering
Thinking StartsWith causes syntax error
Believing string.Join can't join booleans
5. Given a list of products with properties Name and Price, how can you use advanced LINQ to create a dictionary where keys are product names and values are prices, but only include products priced above 100?
hard
A. products.Where(p => p.Price > 100).ToDictionary(p => p.Name, p => p.Price);
B. products.ToDictionary(p => p.Name, p => p.Price > 100);
C. products.Select(p => new {p.Name, p.Price > 100}).ToDictionary();
D. products.Where(p => p.Price > 100).Select(p => p.Name, p => p.Price);
Solution
Step 1: Filter products priced above 100
Use Where(p => p.Price > 100) to select only those products.
Step 2: Convert filtered list to dictionary
Use ToDictionary(p => p.Name, p => p.Price) to create dictionary with name keys and price values.
Final Answer:
products.Where(p => p.Price > 100).ToDictionary(p => p.Name, p => p.Price); -> Option A
Quick Check:
Filter then ToDictionary = products.Where(p => p.Price > 100).ToDictionary(p => p.Name, p => p.Price); [OK]
Hint: Filter first, then use ToDictionary with key and value selectors [OK]
Common Mistakes:
Trying to use ToDictionary without filtering first
Passing boolean expressions as dictionary values
Incorrect use of Select for dictionary creation
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.