LINQ - 获取所有父记录的所有子记录

4

我有两个模型:

class Foo
{
    public List<Bar> Bars { get; set; }    
}

class Bar
{
    public int Value { get; set; }    
}

拥有一个 List<Foo> 实例,如何使用 LINQ 查询获取所有的 Value 值?

谢谢大家。

3个回答

12

SelectMany通常是扁平化层次结构的方式,因此:

var values = myList.SelectMany(foo => foo.Bar)
                   .Select(bar => bar.Value);

SelectMany会给你一个IEnumerable<Bar>,然后Select将这个Bar对象序列映射到每个对象的Value属性, 返回一个IEnumerable<int>

作为查询表达式,它应该是这样的:

var values = from foo in myList
             from bar in foo.Bar
             select bar.Value;

7

我建议您将List<Bar>属性名称更改为Bars

首先使用SelectMany()。它将序列的每个元素投影到一个IEnumerable<T>中,并将结果序列展平为一个序列。然后使用Select()按您的要求将新序列的每个元素投影出来。

var result = myList.SelectMany(x => x.Bars).Select(x => x.Value).ToList();

2
请使用SelectMany而不是Select
var result = LIST1.SelectMany(x => x.LIST2.Select(y => y.Value)).Tolist();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接