-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 专栏)

可以说我们只考虑这三代人。40 年代出生的人称为 ID,70 年代出生的人称为孩子,2000 年后出生的人称为孙子。

对于内存中的上述列表,我想编写一个 LINQ 查询,它给我一个 ID 列表,以及他们所有的孩子,孩子们会有他们自己的孩子。

我怎样才能在 LINQ 中做到这一点?我写的查询似乎太乏味了。

4

3 回答 3

3
var results = people
    .SelectMany(p => p.Kids
        .SelectMany(c => c.Kids
            .Select(g => new { 
                ID = p.ID, 
                KidID = c.ID, 
                GrandKidID = g.ID
             })));
于 2013-01-10T18:58:26.097 回答
1

按 ID 分组,将 KidID、GrandKidID 提取到新的 Person 中。为孩子们重复这个过程。

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;
于 2013-01-10T19:13:02.883 回答
1

按 ID 和 KidID 分组

var result = data.GroupBy (x => new { ID = x.ID, KidID = x.KidID }).Select( x=> x.Key).ToArray();
于 2013-01-10T18:57:47.020 回答