Q:

Use LINQ to select distinct properties in Lists of Lists

I want to use LINQ to select a unique list of strings, stored as a List, inside an object. This object is itself stored in a List inside another object. It's hard to explain, here is an example:
public class Master
{
   public List<DataCollection> DateCollection { get; set; }
   public Master() { this.DateCollection = new List<DataCollection>(); }
}

public class DataCollection
{
   public List<Data> Data { get; set; }
   public DataCollection() { this.Data = new List<Data>(); }
}

public class Data
{
   public string Value{ get; set; }
   public Data() {  }
}

Using the Master class, I want to get a list of unique Value strings in the Data class. I have tried the following:
List<string> unique = master.Select(x => x.DataCollection.Select(y => y.Value)).Distinct().ToList();

Can somebody show me how it's done?

A:

You can do that like this, directly using the public DateCollection member:
var unique = master.DateCollection
    .SelectMany(x => x.Data.Select(d => d.Value))
    .Distinct()
    .ToList();

The key being SelectMany to "flatten" the selection.

A:

SelectMany projects a list of lists into a single list:
List<string> unique = master
    .SelectMany(x => x.DataCollection.Select(y => y.Value))
    .Distinct()
    .ToList();

