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

SelectMany for flattening in C Sharp (C#) - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does SelectMany do in LINQ?

SelectMany takes a collection of collections and flattens it into a single collection by combining all inner collections into one.

Click to reveal answer
beginner
How is SelectMany different from Select?

Select projects each element into a new form but keeps the nested collections, while SelectMany flattens those nested collections into one sequence.

Click to reveal answer
beginner
Example: What is the output of this code?
var numbers = new List<List<int>> { new() {1, 2}, new() {3, 4} };
var flat = numbers.SelectMany(x => x);
foreach(var n in flat) Console.Write(n + " ");

The output is: 1 2 3 4

Because SelectMany flattens the list of lists into a single list of numbers.

Click to reveal answer
beginner
Can SelectMany be used with arrays or only lists?

SelectMany works with any IEnumerable<T>, so it works with arrays, lists, and other collections.

Click to reveal answer
beginner
Why is SelectMany useful in real life?

It helps when you have nested data like a list of orders where each order has many items, and you want to work with all items in one list.

Click to reveal answer
What does SelectMany do in LINQ?
AGroups elements by a key
BFilters elements based on a condition
CSorts elements in ascending order
DFlattens nested collections into a single collection
Which method keeps nested collections without flattening?
ASelectMany
BWhere
CSelect
DOrderBy
Given var data = new List<List<int>> { new() {1,2}, new() {3,4} };, what does data.SelectMany(x => x) return?
AA flat list: 1, 2, 3, 4
BA list of lists
CAn empty list
DA list with two elements
Can SelectMany be used on arrays?
AYes, on any IEnumerable&lt;T&gt;
BNo, only on lists
COnly on dictionaries
DOnly on strings
Why use SelectMany when working with nested data?
ATo remove duplicates
BTo flatten nested collections for easier processing
CTo sort nested collections
DTo convert collections to strings
Explain in your own words what SelectMany does and give a simple example.
Think about turning many small boxes into one big box.
You got /3 concepts.
    Describe a real-life scenario where using SelectMany would make your code simpler.
    Imagine you have many shopping bags and want to see all items at once.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the SelectMany method do in C# when used on a list of lists?
      easy
      A. It sorts each inner list individually.
      B. It filters the outer list based on a condition.
      C. It flattens the nested lists into a single list containing all elements.
      D. It creates a dictionary from the nested lists.

      Solution

      1. Step 1: Understand the structure of nested lists

        A list of lists means you have many small lists inside one big list.
      2. Step 2: Role of SelectMany

        SelectMany takes each small list and combines all their elements into one big flat list.
      3. Final Answer:

        It flattens the nested lists into a single list containing all elements. -> Option C
      4. Quick Check:

        SelectMany flattens nested lists = B [OK]
      Hint: SelectMany flattens nested lists into one list fast [OK]
      Common Mistakes:
      • Thinking SelectMany sorts or filters instead of flattening
      • Confusing SelectMany with Select which keeps nested structure
      • Assuming SelectMany creates dictionaries
      2. Which of the following is the correct syntax to flatten a list of lists List numbers using SelectMany?
      easy
      A. var flat = numbers.SelectMany(x => x);
      B. var flat = numbers.Select(x => x);
      C. var flat = numbers.SelectMany(x => x.ToString());
      D. var flat = numbers.SelectMany(x => x.Count());

      Solution

      1. Step 1: Understand SelectMany syntax

        SelectMany expects a function that returns an inner collection to flatten.
      2. Step 2: Check each option

        var flat = numbers.SelectMany(x => x); returns each inner list as is, which is correct. var flat = numbers.Select(x => x); uses Select, not flattening. Options C and D return wrong types (string and int), not collections.
      3. Final Answer:

        var flat = numbers.SelectMany(x => x); -> Option A
      4. Quick Check:

        SelectMany with identity function flattens = A [OK]
      Hint: Use SelectMany with identity function to flatten lists [OK]
      Common Mistakes:
      • Using Select instead of SelectMany
      • Returning non-collections inside SelectMany
      • Trying to flatten by counting elements
      3. What is the output of the following code?
      var data = new List {
        new List<int> {1, 2},
        new List<int> {3, 4},
        new List<int> {5}
      };
      var result = data.SelectMany(x => x).ToList();
      Console.WriteLine(string.Join(",", result));
      medium
      A. 12345
      B. 1,2;3,4;5
      C. System.Collections.Generic.List`1[System.Int32]
      D. 1,2,3,4,5

      Solution

      1. Step 1: Understand SelectMany flattening

        SelectMany flattens all inner lists into one list: [1,2,3,4,5].
      2. Step 2: Output formatting

        string.Join with "," joins elements with commas, so output is "1,2,3,4,5".
      3. Final Answer:

        1,2,3,4,5 -> Option D
      4. Quick Check:

        Flattened list joined by commas = D [OK]
      Hint: SelectMany flattens, string.Join prints with commas [OK]
      Common Mistakes:
      • Expecting nested list output instead of flat
      • Confusing ToString output of list object
      • Missing commas in output
      4. Identify the error in this code snippet that tries to flatten a list of lists:
      List words = new() {
        new List<string> {"apple", "banana"},
        new List<string> {"cat", "dog"}
      };
      var flatWords = words.SelectMany(w => w.Length).ToList();
      medium
      A. The list initialization syntax is incorrect.
      B. Using w.Length returns int, not a collection, causing a compile error.
      C. Missing parentheses after SelectMany call.
      D. ToList() cannot be called after SelectMany.

      Solution

      1. Step 1: Analyze the lambda inside SelectMany

        The lambda uses w => w.Length, which returns an int, not a collection.
      2. Step 2: Understand SelectMany requirements

        SelectMany expects a function returning a collection to flatten, not a single int value.
      3. Final Answer:

        Using w.Length returns int, not a collection, causing a compile error. -> Option B
      4. Quick Check:

        SelectMany needs collections, not int = C [OK]
      Hint: SelectMany lambda must return collections, not single values [OK]
      Common Mistakes:
      • Returning single values instead of collections in SelectMany
      • Confusing Length property with collection
      • Assuming ToList() causes error
      5. Given a list of students where each student has a list of grades, how would you use SelectMany to get a list of all grades above 80 from all students?
      class Student {
        public string Name { get; set; }
        public List<int> Grades { get; set; }
      }
      
      List<Student> students = new() {
        new Student { Name = "Anna", Grades = new List<int> { 90, 70 } },
        new Student { Name = "Ben", Grades = new List<int> { 85, 60 } }
      };
      
      // Fill in the blank to get all grades > 80
      var highGrades = students.SelectMany(__________).ToList();
      hard
      A. s => s.Grades.Where(g => g > 80)
      B. s => s.Grades
      C. s => s.Name
      D. s => s.Grades.Count

      Solution

      1. Step 1: Understand the goal

        We want all grades above 80 from all students combined.
      2. Step 2: Use SelectMany with filtering inside

        s => s.Grades.Where(g => g > 80) filters grades > 80 inside SelectMany, flattening only those grades.
      3. Step 3: Why not others?

        s => s.Grades flattens all grades, including low ones like 70 and 60. Options C and D return wrong types (string and int).
      4. Final Answer:

        s => s.Grades.Where(g => g > 80) -> Option A
      5. Quick Check:

        SelectMany with filtered inner lists = A [OK]
      Hint: Filter inside SelectMany to flatten only needed items [OK]
      Common Mistakes:
      • Flattening all grades without filtering
      • Returning non-collections in SelectMany
      • Using wrong property like Name or Count
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard