我有两个模型:
class Foo
{
public List<Bar> Bars { get; set; }
}
class Bar
{
public int Value { get; set; }
}
拥有一个 List<Foo>
实例,如何使用 LINQ 查询获取所有的 Value
值?
谢谢大家。
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;
我建议您将List<Bar>
属性名称更改为Bars
。
首先使用SelectMany()
。它将序列的每个元素投影到一个IEnumerable<T>
中,并将结果序列展平为一个序列。然后使用Select()
按您的要求将新序列的每个元素投影出来。
var result = myList.SelectMany(x => x.Bars).Select(x => x.Value).ToList();
SelectMany
而不是Select
。var result = LIST1.SelectMany(x => x.LIST2.Select(y => y.Value)).Tolist();