使用LINQ从嵌套集合中获取特定值

时间:2010-11-30 14:05:46

标签: c# linq

我有一组“产品”对象,每个对象都包含一组福利对象。见下文:

<Products>
        <Product ID="454">
            <ProductName>Economy</ProductName>
            <Benefits>
                <Benefit>
                    <Name>Medical</Name>
                    <Value>5000000</Value>
                    <Excess>100</Excess>
                </Benefit>
                <Benefit>
                    <Name>Emergency</Name>
                    <Value>350</Value>
                    <Excess>100</Excess>
                </Benefit>
        </Product>
</Products>

我正在尝试创建LINQ查询以获取产品“454”的“医疗”福利值:

<%: Model.Products.Where(x => x.ProductId == "454").SelectMany(p => p.Benefits).Where(b => b.Name == "Medical").Select(v => v.Value.ToString()) %>

然而,这只会返回:

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[Domain.Entities.Benefit,System.String]  System.Linq.Enumerable+WhereSelectEnumerableIterator`2[Domain.Entities.Benefit,System.String]  System.Linq.Enumerable+WhereSelectEnumerableIterator`2[Domain.Entities.Benefit,System.String]  System.Linq.Enumerable+WhereSelectEnumerableIterator`2[Domain.Entities.Benefit,System.String

如何让它返回我之后的实际值?

3 个答案:

答案 0 :(得分:4)

如果您知道只有一个(保证),那么添加.Single() - 如果可能没有/某些而您只想要第一个,请添加.FirstOrDefault()(如果没有结果则返回null )

答案 1 :(得分:2)

试试这个

Model.Products
    .Where(p => p.ID == 454)
    .SelectMany(p => p.Benefits)
    .Where(b => b.Name == "Medical")
    .Single()
    .Value.ToString();

答案 2 :(得分:0)

试试这个:

var val = employees.Where(p => p.ProductId == 454).FirstOrDefault().Benefits.Select(b => b.Value).FirstOrDefault();

var benefits_value = employees.Where(p => p.ProductId == 454).Single().Benefits.Select(b => b.Value).Single();