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?
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.
SelectMany
projects a list of lists into a single list:
List<string> unique = master
.SelectMany(x => x.DataCollection.Select(y => y.Value))
.Distinct()
.ToList();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With