Bird
Raised Fist0
C Sharp (C#)programming~20 mins

LINQ with custom objects in C Sharp (C#) - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

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
Challenge - 5 Problems
🎖️
LINQ Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
LINQ Query Output with Custom Objects

What is the output of the following C# code using LINQ on a list of custom Person objects?

C Sharp (C#)
using System;
using System.Collections.Generic;
using System.Linq;

public class Person {
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program {
    public static void Main() {
        var people = new List<Person> {
            new Person { Name = "Alice", Age = 30 },
            new Person { Name = "Bob", Age = 25 },
            new Person { Name = "Charlie", Age = 35 },
            new Person { Name = "Diana", Age = 28 }
        };

        var result = people.Where(p => p.Age > 28).OrderBy(p => p.Name).Select(p => p.Name);

        foreach (var name in result) {
            Console.WriteLine(name);
        }
    }
}
A
Alice
Diana
Charlie
B
Charlie
Alice
C
Bob
Diana
D
Alice
Charlie
Attempts:
2 left
💡 Hint

Look at the filter condition Age > 28 and then the ordering by Name.

🧠 Conceptual
intermediate
1:30remaining
Understanding LINQ Select Projection

Given a list of Product objects, which LINQ query correctly projects only the product names into a list of strings?

C Sharp (C#)
public class Product {
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
}

var products = new List<Product> {
    new Product { Id = 1, Name = "Pen", Price = 1.5 },
    new Product { Id = 2, Name = "Notebook", Price = 3.0 },
    new Product { Id = 3, Name = "Eraser", Price = 0.5 }
};
Avar names = products.Select(p => p.Name).ToList();
Bvar names = products.Where(p => p.Name).ToList();
Cvar names = products.Select(p => p.Price).ToList();
Dvar names = products.OrderBy(p => p.Name).ToList();
Attempts:
2 left
💡 Hint

Projection means selecting a specific property from each object.

🔧 Debug
advanced
2:30remaining
Fix the LINQ Query to Avoid Runtime Error

The following code throws a runtime exception. Which option fixes the code so it runs without error and returns the names of employees older than 40?

C Sharp (C#)
using System;
using System.Collections.Generic;
using System.Linq;

public class Employee {
    public string Name { get; set; }
    public int? Age { get; set; }
}

public class Program {
    public static void Main() {
        var employees = new List<Employee> {
            new Employee { Name = "John", Age = 45 },
            new Employee { Name = "Jane", Age = null },
            new Employee { Name = "Mark", Age = 50 }
        };

        var result = employees.Where(e => e.Age > 40).Select(e => e.Name);

        foreach (var name in result) {
            Console.WriteLine(name);
        }
    }
}
Avar result = employees.Where(e => e.Age != null).Select(e => e.Name);
Bvar result = employees.Where(e => e.Age.HasValue && e.Age > 40).Select(e => e.Name);
Cvar result = employees.Where(e => e.Age.Value > 40).Select(e => e.Name);
Dvar result = employees.Where(e => e.Age > 40).Select(e => e.Name);
Attempts:
2 left
💡 Hint

Nullable types need to be checked before comparing their values.

📝 Syntax
advanced
1:30remaining
Identify the Syntax Error in LINQ Query

Which option contains a syntax error in the LINQ query that selects all customers with balance greater than 1000?

C Sharp (C#)
public class Customer {
    public string Name { get; set; }
    public decimal Balance { get; set; }
}

var customers = new List<Customer> {
    new Customer { Name = "Anna", Balance = 1200 },
    new Customer { Name = "Ben", Balance = 800 },
    new Customer { Name = "Cara", Balance = 1500 }
};
Avar richCustomers = customers.Where(c => c.Balance > 1000).Select(c.Name);
Bvar richCustomers = customers.Where(c => c.Balance > 1000).Select(c => c.Name);
Cvar richCustomers = from c in customers where c.Balance > 1000 select c.Name;
Dvar richCustomers = customers.Where(c => c.Balance > 1000).Select(c => c.Name).ToList();
Attempts:
2 left
💡 Hint

Check the syntax of the Select method usage.

🚀 Application
expert
3:00remaining
Count Unique Cities from a List of People Using LINQ

Given a list of Person objects where each has a City property, which LINQ expression correctly counts how many unique cities are in the list?

C Sharp (C#)
public class Person {
    public string Name { get; set; }
    public string City { get; set; }
}

var people = new List<Person> {
    new Person { Name = "Tom", City = "New York" },
    new Person { Name = "Sara", City = "Boston" },
    new Person { Name = "Mike", City = "New York" },
    new Person { Name = "Anna", City = "Chicago" }
};
Aint count = people.GroupBy(p => p.City).Count();
Bint count = people.Count(p => p.City.Distinct());
Cint count = people.Select(p => p.City).Distinct().Count();
Dint count = people.Select(p => p.City).Count();
Attempts:
2 left
💡 Hint

Think about how to get unique values and then count them.

Practice

(1/5)
1. What does LINQ primarily help you do with custom objects in C#?
easy
A. Create new classes automatically
B. Compile code faster
C. Filter, sort, and select data easily
D. Manage memory manually

Solution

  1. Step 1: Understand LINQ's purpose

    LINQ is designed to query collections like lists of objects easily.
  2. Step 2: Identify LINQ's main features

    It helps filter, sort, and select data without manual loops.
  3. Final Answer:

    Filter, sort, and select data easily -> Option C
  4. Quick Check:

    LINQ = Filter, sort, select [OK]
Hint: Remember LINQ is for querying data collections [OK]
Common Mistakes:
  • Thinking LINQ creates classes
  • Confusing LINQ with compilation
  • Assuming LINQ manages memory
2. Which of the following is the correct syntax to select all names from a list of Person objects using LINQ?
easy
A. var names = people.Select(p => p.Name());
B. var names = people.Select(p.Name);
C. var names = people.Select(p => p);
D. var names = people.Select(p => p.Name);

Solution

  1. Step 1: Understand Select syntax

    Select expects a lambda expression to pick a property, like p => p.Name.
  2. Step 2: Check each option

    var names = people.Select(p => p.Name); uses correct lambda syntax. var names = people.Select(p.Name); misses lambda. var names = people.Select(p => p); selects whole object. var names = people.Select(p => p.Name()); wrongly calls Name as method.
  3. Final Answer:

    var names = people.Select(p => p.Name); -> Option D
  4. Quick Check:

    Select needs lambda with property [OK]
Hint: Use lambda syntax p => p.Property for Select [OK]
Common Mistakes:
  • Omitting lambda arrow =>
  • Calling property as method
  • Selecting whole object instead of property
3. Given the class Person { public string Name; public int Age; } and list people with three persons: Alice(30), Bob(25), and Carol(35), what does this LINQ query return?
var result = people.Where(p => p.Age > 28).Select(p => p.Name).ToList();
medium
A. ["Alice", "Carol"]
B. ["Bob"]
C. ["Alice", "Bob", "Carol"]
D. Empty list

Solution

  1. Step 1: Filter people older than 28

    Alice is 30 (yes), Bob is 25 (no), Carol is 35 (yes).
  2. Step 2: Select their names

    Names selected are "Alice" and "Carol".
  3. Final Answer:

    ["Alice", "Carol"] -> Option A
  4. Quick Check:

    Age > 28 filters Alice and Carol [OK]
Hint: Filter first, then select property [OK]
Common Mistakes:
  • Including Bob who is younger
  • Selecting whole object instead of names
  • Confusing > with <
4. What is wrong with this LINQ query?
var adults = people.Where(p => p.Age >= 18).Select(p => p.Name);
foreach(var name in adults) Console.WriteLine(name);
medium
A. The query is correct and will print all names of adults
B. The lambda expression syntax is incorrect
C. The query is missing ToList() or ToArray(), so it won't compile
D. The Where clause should be after Select

Solution

  1. Step 1: Check LINQ query syntax

    Where and Select are used correctly with proper lambda syntax.
  2. Step 2: Check foreach usage

    LINQ returns IEnumerable<string>, which foreach can iterate without ToList().
  3. Final Answer:

    The query is correct and will print all names of adults -> Option A
  4. Quick Check:

    IEnumerable works with foreach directly [OK]
Hint: IEnumerable can be iterated without ToList() [OK]
Common Mistakes:
  • Thinking ToList() is mandatory before foreach
  • Misplacing Where and Select order
  • Incorrect lambda syntax
5. You have a list of Product objects with properties Name (string) and Price (decimal). How do you create a dictionary with product names as keys and prices as values, but only include products costing more than 50 using LINQ?
hard
A. products.ToDictionary(p => p.Name, p => p.Price).Where(p => p.Value > 50);
B. products.Where(p => p.Price > 50).ToDictionary(p => p.Name, p => p.Price);
C. products.Select(p => new {p.Name, p.Price > 50}).ToDictionary(p => p.Name, p => p.Price);
D. products.Where(p => p.Price > 50).Select(p => p.Name).ToDictionary();

Solution

  1. Step 1: Filter products with price > 50

    Use Where to keep only products costing more than 50.
  2. Step 2: Convert filtered list to dictionary

    Use ToDictionary with key selector p.Name and value selector p.Price.
  3. Final Answer:

    products.Where(p => p.Price > 50).ToDictionary(p => p.Name, p => p.Price); -> Option B
  4. Quick Check:

    Filter then ToDictionary with key and value selectors [OK]
Hint: Filter first, then use ToDictionary with key and value [OK]
Common Mistakes:
  • Trying to filter after ToDictionary (invalid)
  • Selecting anonymous types instead of original objects
  • Calling ToDictionary without key/value selectors