57
public class ClassA
{
     public string MyString {get; set;}
}

public class ClassB
{
     public List<ClassA> MyObjects {get; set;}
}

List<ClassB> classBList = new List<ClassB>();
var results = (from i in classBList select i.MyObjects).Distinct();

I want a distinct list of all the ClassA objects in the classBList. How do I go about this using LINQ? I'm thinking about a nested query, but couldn't quite figure it out. Any help is very appreciated.

2 Answers 2

118

You're trying to select multiple result objects for each ClassB object in the original list.

Therefore, you're looking for the SelectMany extension method:

var results = classBList.SelectMany(b => b.MyObjects).Distinct();

If you want to use query expressions, you'll need to use two from clauses:

var results = (from b in classBList from a in b.MyObjects select a).Distinct();
Sign up to request clarification or add additional context in comments.

2 Comments

Does the query syntax you provide use SelectMany once translated? I'm a tad naive when it comes to query syntax since it always looks more verbose (except in join situations).
@Justin: Yes; those two expressions should compile identically.
19

You want to use IEnumerable.SelectMany() Extension Method to flatten the hierarchy:

var result = classBList.SelectMany(b => b.MyObjects).Distinct();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.