使用 LINQ to select Lists of Lists 中的不同属性

Use LINQ to select distinct properties in Lists of Lists

我想使用 LINQ 来 select 一个唯一的字符串列表,作为列表存储在一个对象中。该对象本身存储在另一个对象内的列表中。很难解释,举个例子:

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() {  }
}

使用 Master class,我想获得数据 class 中唯一值字符串的列表。我尝试了以下方法:

List<string> unique = master.Select(x => x.DataCollection.Select(y => y.Value)).Distinct().ToList();

谁能告诉我怎么做?

您可以这样做,直接使用 public DateCollection 成员:

var unique = master.DateCollection
    .SelectMany(x => x.Data.Select(d => d.Value))
    .Distinct()
    .ToList();

关键是SelectMany到"flatten"的选择。

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

List<string> unique = master
    .SelectMany(x => x.DataCollection.Select(y => y.Value))
    .Distinct()
    .ToList();