在Entity Framework Code First中,我具有以下对象层次结构:

class Parent {
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Child> Children { get; set; }
}

class Child {
    public int Id { get; set; }
    public int ParentId { get; set; }

    public virtual ICollection<Grandchild> Grandchildren { get; set; }
}

class Grandchild {
    public string Name { get; set; }
    public int Age { get; set; }
}


我想获取父母和他们最大的孙子的年龄列表。如果我的数据库中有2个父母,则每个父母有2个孩子,每个孩子有2个孩子:

Parent 1
    Child 1
        Grandchild 1 - Age 10
        Grandchild 2 - Age 15
    Child 2
        Grandchild 3 - Age 3
        Grandchild 4 - Age 7
Parent 2
    Child 3
        Grandchild 5 - Age 1
        Grandchild 6 - Age 9
    Child 4
        Grandchild 7 - Age 18
        Grandchild 8 - Age 16


我希望查询返回两个对象:

var expected = new List<anon>
{
    new { Name = "Parent 1", MaxAge = 15 },
    new { Name = "Parent 2", MaxAge = 18 }
};


如何在LINQ to Entities中编写此内容?

编辑
另外,是否可以返回孙子的名字及其年龄?基本上有孙子的最大年龄,那个孙子是谁?

最佳答案

from parent in db.Parents
select new
{
    Name = parent.Name,
    MaxAge = (
        from child in parent.Children
        from grandchild in child.Grandchildren
        select grandchild.Age)
        .Max()
};

关于c# - LINQ Max孙子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9668587/

10-11 19:18