2012-03-12 15 views
2

私は、Entity Frameworkのコードファーストでのオブジェクトの次の階層を持っている:LINQマックス孫

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 

を私はクエリが2つのオブジェクトを返すようにしたい:

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

は、どのように私はこれを書くことができますLINQ to Entities?

編集
また、それは自分の年齢と一緒にgrandchilds名を戻すことができますか?基本的には、孫の最大年齢とその孫は誰ですか?

+0

? –

+0

また、LINQ to Entitiesというデータベースもありますが、これらのエンティティを読み込んでリストなどに格納しているとしますか? –

+0

DbSetにあります Dismissile

答えて

3
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() 
}; 
+0

ありがとうございました。 – Dismissile

1

あなたがこれを行うことができます:私は子供が孫(null)を持っていないためにそれが可能だと仮定してい

var query = from p in parents 
      select 
      { 
       Name = p.Name, 
       MaxAge = p.SelectMany(parent => parent.children) 
       .SelectMany(child => child.children) 
       .Max(i => i.Age) 
      }; 
関連する問題