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

标签 c# .net linq distinct

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

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 类,我想获得 Data 类中唯一值字符串的列表。我尝试了以下方法:

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 以“展平”选择。

关于c# - 使用 LINQ 在列表的列表中选择不同的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29679862/

相关文章:

asp.net - <% : and <%= in ASP. NET MVC 和有什么区别?

c# - 将 BYTE 数组转换为 INT

c# - 使用 C# 连接到本地 SQL Server 数据库

c# - 解析字符串并在 C# 中查找特定文本

.net - 静态类是线程安全的吗

c# - 使用通用列表作为数据源和自动生成列的 Gridview

c# - 无法仅在 Windows Phone 上读取具有值的 json 数组

c# - 数据表作为 C# 控制台应用程序中的邮件

c# - 如何使用 lambda 或 linq 从整数列表中的对象列表中收集多个 int 属性?

c# - 如何进行时间间隔的计算?