在引用父级时选择多个

时间:2015-09-30 00:18:36

标签: linq

鉴于

List<Foo> foos;

public class Foo
{
    public string Name { get; set; }

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

public class Bar
{
    public double Score { get; set; }
}

我正在尝试为foos中的每个对象输出属性Foo.Name以及最大Bar.Score。我看到如何获得最高分:

foos.SelectMany(f => f.Bars).MaxBy(b => b.Score).Select(b => b.Score);

有没有办法获得相应的名称,而不需要将Bar的引用添加回Foo?如果我做了以下更改

public class Bar
{
    public Foo Foo { get; set; } // Can't really add this
    public double Score { get; set; }
}

我能做到

foos.SelectMany(f => f.Bars).MaxBy(b => b.Score)
    .Select(b => new { Name = b.Foo.Name, Score = b.Score) });

但是在实际情况下,我无法添加后退参考。

1 个答案:

答案 0 :(得分:1)

您无需使用SelectMany,只需将SelectMax一起使用:

var result = foos
    .Select(f => new 
    { 
        Name = f.Name, 
        MaxScore = f.Bars.Max(b => b.Score) 
    });