2012-07-05 66 views
2

我想显示一个子属性的所有可能的值。下面我试图将所有产品的所有可能的颜色都变成一个变量。我如何获得下面的所有分数颜色?如何通过Linq获得所有子属性的区分?

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

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

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

回答

10

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

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

查询语法也很好地工作为此:

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