如何使用LINQ执行此操作?

时间:2013-01-10 18:52:30

标签: c# linq linq-to-sql hierarchy

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年代的人作为身份证,70年代出生的孩子和2000年出生的人为大孩子。

对于上面的列表如内存,我想写一个LINQ查询给我一个ID列表,所有孩子和孩子都会有自己的孩子。

如何在LINQ中执行此操作?我写的查询似乎太乏味了。

3 个答案:

答案 0 :(得分: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 :(得分:1)

按ID分组,以及KidID

var result = data.GroupBy (x => new { ID = x.ID, KidID = x.KidID }).Select( x=> x.Key).ToArray();

答案 2 :(得分: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;