使用LINQ在列表列表中选择不同的属性

Joh*_*ith 12 .net c# linq distinct

我想使用LINQ在对象内选择一个唯一的字符串列表,存储为List.该对象本身存储在另一个对象内的List中.这很难解释,这是一个例子:

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() {  }
}
Run Code Online (Sandbox Code Playgroud)

使用Master类,我想获得Data类中唯一Value字符串的列表.我尝试过以下方法:

List<string> unique = master.Select(x => x.DataCollection.Select(y => y.Value)).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

有人能告诉我它是如何完成的吗?

Ale*_*lex 24

您可以直接使用公共DateCollection成员这样做:

var unique = master.DateCollection
    .SelectMany(x => x.Data.Select(d => d.Value))
    .Distinct()
    .ToList();
Run Code Online (Sandbox Code Playgroud)

关键是SelectMany"压扁"选择.


Mat*_*eid 9

SelectMany 将列表列表投射到单个列表中:

List<string> unique = master
    .SelectMany(x => x.DataCollection.Select(y => y.Value))
    .Distinct()
    .ToList();
Run Code Online (Sandbox Code Playgroud)