2013-01-10 160 views
-4
ID kidID grandKidID 
1 3   7 
1 3   8 
1 4   9 
2 5   10 
2 6   11 

有兩個人1和2(在ID列下)。 先生1有兩個孩子3和4.(KidID列)。他們自己有自己的孩子(grandKidID專欄)如何使用LINQ執行此操作?

可以說我們只考慮這三代人。出生在40多歲的人是身份證,70年代出生的人是孩子,2000年出生的人是孩子。

對於內存中的上述列表,我想寫一個LINQ查詢,它給了我一個ID列表,其所有的孩子和孩子都有自己的孩子。

我該如何在LINQ中做到這一點?我寫的問題似乎太乏味了。

+0

這是使用nhibernate拉入內存的表。 – developer747

+0

LINQ to SQL? LINQ to Entities? LINQ到對象? –

+0

LINQ to SQL。但那並不重要。該對象在內存中作爲List。 – developer747

回答

1

組由ID,和KidID

var result = data.GroupBy (x => new { ID = x.ID, KidID = x.KidID }).Select(x=> x.Key).ToArray(); 
3
var results = people 
    .SelectMany(p => p.Kids 
     .SelectMany(c => c.Kids 
      .Select(g => new { 
       ID = p.ID, 
       KidID = c.ID, 
       GrandKidID = g.ID 
      }))); 
1

組由ID,並提取KidID,GrandKidID到一個新的人。爲孩子們重複這個過程。

class Person { 
    public int ID {get; set; } 
    public List<Person> Kids {get; set; } 
} 

List<Person> = snafuPersons 
    .GroupBy(person => person.ID) 
    .Select(group => new Person { 
     ID = group.Key, 
     Kids = group.GroupBy(kid => kid.KidID) 
       .Select(kidGroup => new Person{ 
        ID = kidGroup.Key, 
        Kids = kidGroup.Select(grandKid => 
            new Person { ID = grandKid.GrandKidID}) 
            .ToList() 
       }).ToList() 
     }).ToList;