如何通过Linq区分所有子子属性?

时间:2012-07-05 11:39:11

标签: c# .net linq .net-4.0

我正在尝试显示子属性的所有可能值。下面我试图将所有产品的所有颜色都变成一个变量。我怎样才能获得下面的allDistinctColors?

IEnumerable<Product> products = GetAllProducts();
IEnumerable allDistinctColors = ???

public class Product
{
  public List<Option> Options { get; set; }
}

public class Option
{
  public string Color { get; set; }
}

3 个答案:

答案 0 :(得分:10)

使用SelectMany为每个输入项(产品)选择多个输出项(选项),并将它们连接成一个枚举,以便进一步查询:

var allDistinctColors = products
    .SelectMany(p => p.Options)
    .Select(o => o.Color)
    .Distinct();

答案 1 :(得分:2)

var allDistinctColors = products
     .SelectMany(p => p.Options.Select(o => o.Color))
     .Distinct()

答案 2 :(得分:1)

查询语法也适用于此:

var allDistinctColors = (from p in products
                         from o in p.Options
                         select o.Color).Distinct();